在下串列T中,執行select * from T where k betwee 3 and 5;,需要執行幾次樹的搜索操作?
mysql> create table T (
ID int primary key,
k int NOT NULL DEFAULT 0,
s varchar(16) NOT NULL DEFAULT '',
index k(k))
engine=InnoDB;
insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');
SQL陳述句執行流程:
- 在k索引樹上找到k值為3的記錄,取得ID為300
- 再到ID索引樹上找到ID為300對應的R3記錄
- 在k索引樹上找到k值為5的記錄,取得ID為500
- 再回到ID索引樹上找到ID為500對應的R4記錄
- 在k索引樹上找到k值為6的記錄,不符合條件,結束回圈
在這個程序中,回到主鍵索引搜索樹的程序,成為回表,
在這個例子中,由于查詢結果所需要的資料只有主鍵索引上有,所以不得不回表,如果執行的陳述句是select ID from T where k between 3 and 5;,只需要查詢ID的值,而k索引樹上有這個值,不需要回表,索引k已經覆寫了查詢所需要的值,成為覆寫索引,
覆寫索引可以減少樹的搜索次數,顯著提升查詢性能,所以使用覆寫索引是一個常用的性能優化手段,
聯合索引:將多個欄位設定為索引,在B+樹上符合最左前綴原則,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/62713.html
標籤:MySQL
上一篇:索引上(4)
