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+樹其葉子節點存放的是所有的數據行,即整張表的數據,所以稱之為回表查詢。