MySQL回表與覆蓋索引

最近面試的時候被問到MySQL的索引,其中有個回表,問的我一臉懵X,今天逛站的時候偶然看到,於是趕緊看看,記錄下所感。
我理解的回表應該是 MySQL本身使用的B+Tree,聚集索引它的非葉子節點存放的是數據的id,葉子節點存放的數據,利用索引查的時候,先找到非葉子節點的id,然後找到葉子節點的數據,對比一下發現沒有需要的那個數據項,然後再根據id去查詢該數據的所有數據項,這樣就造成了二次查詢,浪費時間,解決辦法就是使用覆蓋索引,將需要用到的數據項都設成索引,然後通過索引一次查出所需要的數據。

看大佬給別人優化sql的時候又用到個force index(xxx)(強制使用某索引,放在from table之後,where之前),很神奇,🐂皮的東西真多,我是井底之🐸,我爲自己代言!

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