1.覆蓋索引
百度百科的解釋是:
覆蓋索引是select的數據列只用從索引中就能夠取得,不必讀取數據行,換句話說查詢列要被所建的索引覆蓋。
比如id是主鍵,k是索引。你的sql是 select id from T where k = 3.此時你的k索引樹上已經存了主鍵,先查k索引樹就能得到id,可以不用再回表查詢數據了。但是索引不是越多越好,當維護索引的成本低於不新建索引時就需要建索引。
由於覆蓋索引可以減少樹的搜索次數,顯著提升查詢性能,所以使用覆蓋索引是一個常用的性能優化手段。
2.最左前綴原則
如果你建立了一個聯合索引 (id,name),當你查詢id 或者 id和name的時候能使用索引。
比如where id = “” and name=“”,或者 where id= “";
如果你有聯合索引 (id,name,age),那麼 有三種情況可以使用
where id = ”“; where id = ”“ and name=“”;where id= “” and name = “” and age = “”;
如果你查 where name = “”;那麼將全表掃描。
3.索引下推
索引下推是MySQL5.6之後的一個查詢優化。
假如有聯合索引(name,age,address),查詢條件是name=“張山” ,age = 20 ,educated = false,根據最左前綴原則,會在非主鍵索引樹中匹配符合條件的 name和age,然後再回表查詢剩餘匹配數據。
在MySQL5.6之前,會先在非主鍵索引中查找name = “張三”的主鍵id,然後回表查詢主鍵索引,查到的數據再匹配age和educated條件。