表tbl有a,b,c三個欄位,其中a是主鍵,b上建了索引,
然后撰寫sql陳述句SELECT * FROM tbl WHERE a=1這樣不會產生回表,因為所有的資料在a的索引樹中均能找到
SELECT * FROM tbl WHERE b=1這樣就會產生回表,因為where條件是b欄位,那么會去b的索引樹里查找資料,但b的索引里面只有a,b兩個欄位的值,沒有c,那么這個查詢為了取到c欄位,就要取出主鍵a的值,然后去a的索引樹去找c欄位的資料,查了兩個索引樹,這就叫回表,
索引覆寫就是查這個索引能查到你所需要的所有資料,不需要去另外的資料結構去查,其實就是不用回表,
怎么避免?不是必須的欄位就不要出現在SELECT里面,或者b,c建聯合索引,但具體情況要具體分析,索引欄位多了,存盤和插入資料時的消耗會更大,這是個平衡問題
原文:https://blog.csdn.net/qq_43410909/article/details/122437980
作者:crazyLL 說明:https://www.cnblogs.com/crazy-lc/ 純粹自己記錄著玩的,來源于自己的想法或者互聯網文章,侵刪轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/499435.html
標籤:MySQL
上一篇:Linux的目錄結構
下一篇:資料庫
