MySQL索引-全表掃描/全索引掃描/回表查詢


1.全表掃描

遍歷整個主鍵索引的B+樹,並且需要讀葉子節點數據,稱之為全表掃描。

例:

select * from table; -- 全表掃描,不走ID索引
select id from table; -- 全索引掃描,走ID索引

 

 

2.全索引掃描

遍歷整個二級索引的B+樹。

例:假設name為table表的二級索引,id為主鍵索引

select name from table; -- 全索引掃描
select id, name from table; -- 全表掃描

 

通過Explain的type屬性可以看出是全表掃描還是全索引掃描。type從最好到最差依次:system > const > eq_ref > ref > range > index > ALL

 index為Full Index Scan,ALL為Full Table Scan,index 與 ALL區別為index類型只遍歷索引樹。這通常比ALL快,因為索引文件通常比數據文件小。一個是遍歷整個索引,一個是遍歷整張表。

 

 

3.回表查詢

在InnoDB中,二級索引葉子節點存儲的不是記錄的指針,而是主鍵的值。所以,對於二級索引的查詢,會查兩顆B+樹,先在二級索引定位主鍵,再去主鍵索引的B+樹上找到最終記錄。由於主鍵索引構建的B+樹其葉子節點存放的是所有的數據行,即整張表的數據,所以稱之為回表查詢。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM