mysql 覆蓋索引

覆蓋索引:只有索引包含了where條件部分和select返回部分的所有字段,才能實現這個目的(只要查詢的條件和返回字段中的 所有字段都能被一個非主鍵索引覆蓋,就能用覆蓋索引)

  • 如果查詢條件使用的是普通索引(或是聯合索引的最左原則字段),查詢結果是聯合索引的字段或是主鍵,不用回表操作,直接返回結果,減少IO磁盤讀寫讀取正行數據

 

 

  • 通常情況下建議使用第二種
  • 1.select * from T where k in(1,2,3,4);
    2.select * from T where k between 1 and 4;
  • why?
  • 第一個要搜索5次,第二個搜索1次 

 

 

  • 數據量很大的時候,二級索引比主鍵索引更快”,這個結論是隻有在使用覆蓋索引時才成立,因爲不需要回表

 

  • 如果查詢順序和聯合索引的順序不一致,優化器會自動做優化

 

 

  • MySQL5.6引入的索引下推優化,可以在索引遍歷過程中,對索引中包含的字段先做判斷,直接過濾掉不滿足條件的記錄,減少回表次數。

 

  • 建立索引會增加insert和update時的消耗,但是能加快查詢,如果做讀寫分離,主庫不建立索引,從庫建立索引,帶來的風險是主從同步的時候延遲會更加大,
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章