通過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、有利于后期的分庫分表,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/96646.html
標籤:MySQL
上一篇:mysql效率優化
下一篇:如何給多個表同時增加新分類id
