MySQL的索引相關概念,覆蓋索引,最左前綴原則,索引下推

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條件。

 

參考:Mysql性能優化:什麼是索引下推?

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章