一、單表
創建索引之前:type=ALL全表掃描,Extra里面的Using filesort(檔案內部排序)

根據where后面的條件創建:CREATE INDEX idx_article_ccv ON article(category_id,comments,views);

可以看出type由ALL變成了range,但是Extra里面的Using filesort(檔案內部排序)未解決
此時洗掉索引:DROP INDEX idx_article_ccv ON article;
重新建立:CREATE INDEX idx_article_ccv ON article(category_id,views);

此時完美解決!!
二、雙表
創建索引之前:type=ALL全表掃描

此時有兩個表,里面都有欄位card,但是現在不知道應該建左表class還是右表book,所以可以先建右表book,查看之后再進行優化
ALTER TABLE book ADD index Y('card');

此時可以明顯看到book表得到優化type=ref,但是class表未得到改變,于是洗掉索引:DROP INDEX Y ON book;
現在加左表class: ALTER TABLE class ADD INDEX Y ('card');

此時看到class表的type=index,建立在右表type=ref,因為ref>index,rows=40>前者的21,所以權衡之間,得到:
左右連接時,左連接建右表索引,右連接建左邊索引,因為這是由于左右連接特性決定的,左連接左表一定都有,右表成了關鍵點,所以右表一定要建立索引,右連接反之,
三、三表
創建索引之前:type=ALL全表掃描,rows=60

從上面兩表或查詢中總結出左連接建右表,那么這里給phone表和book表創建索引

創建好索引后查看結論

此時看到后兩行的type都為ref,中rows=22,優化的很好,因此索引最好建立在經常查詢的欄位中
四、索引失效

最佳左前綴法則:如果索引了多列,指的是查詢從索引的最左搶前列開始并且不跳過索引中的列
問題:如何解決like %字串%索引失效
1、百分號只寫右邊aa%不失效
2、使用覆寫索引【何為覆寫索引見我的上一篇文章MySQL的explain中有解釋】
小結:

優化口訣:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/76846.html
標籤:MySQL
