mysql如何進行性能優化?


 通過explain關鍵字可以模擬優化器執行sql查詢,分析查詢語句或表結構的性能瓶頸。通過explain我們可以知道:

1、表的讀取順序

2、數據讀取操作的類型

3、哪些索引可以使用以及實際被使用的索引

4、表置鍵的引用

5、每張表有多少行被優化器查詢

通過實際案例來解釋explain的使用以及具體分析:

 使用的方式很簡單,只需要在sql語句前面加上explain關鍵字,然后運行。

1、具體的字段代表的含義這里就不在贅述,請參考博文 https://blog.csdn.net/why15732625998/article/details/80388236 

2、通過查詢結果顯示,三條語句都達到了ref級別,說明語句基本達標。但在Extra中顯示表a中顯示了Using temporary和Using filesort,這個就不nice了。

  distinct的使用產生了Using temporary,但這個去重操作又是不可避免的;order by的使用產生了Using filesort,Using filesort表示在索引之外需要額外進行外部的排序動作,一般可以通過合適的索引來減少或者避免。參考博文 https://www.cnblogs.com/jikuanhao/p/11147391.html 

3、語句中我注釋了查詢條件b.is_del=0,是因為該列中存在null值,而null會使索引失效。

4、如何查詢表索引:show keys  from tablename 或 show index from tablename ,具體可見博文 https://blog.csdn.net/justry_deng/article/details/81458470

-------------------------我是分割線-----------------------------------------

一般不建議聯表查詢,很多高性能應用都會對關聯查詢進行分解,主要有如下優勢:

1、將查詢分解后,執行單個表查詢可以減少鎖的競爭。

2、一般高性能應用都會添加緩存機制,分解關聯查詢讓緩存的效率更高(關聯表時,若某個表發生變化,則整個緩存無法使用,但分表查詢只對變化的表查詢緩存有影響)。

3、在應用層做關聯,可以更容易對數據庫進行拆分,更容易做到高性能和可擴展。

4、查詢效率可能會有所提升,這要看具體的情況(單表in查詢按主鍵或索引順尋查詢比隨機關聯查詢效率高),其次我們知道mysql的單表查詢效率比聯表查詢效率更高。

5、可以減少冗余查詢。

6、有利於后期的分庫分表。

補充:explain extended select keys from table; show warnings; 

  -- 顯示當前語句可以優化的建議


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM