【深入理解數據庫原理】數據庫索引原理

先看個例子

在下面這個表T中,如果我執行 select* from t where k between3and5,需要執行幾次樹的搜索操作,會掃描多少行?

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'),(208,2,'bb'),(300,3,'cc'),(509,5,'ee'),(600,6,'ff'),(788,7,'gg')

表結構如下所示:

image

現在,我們一起來看看這條SQL查詢語句的執行流程:

  1. 在k索引樹上找到k=3的記錄,取得ID=300
  2. 再到ID索引樹查到ID=300對應的R3
  3. 在k索引樹取下一個值k=5,取得ID=500
  4. 再回到|D索引樹查到|D=500對應的R4
  5. 在k索引樹取下一個值k=6,不滿足條件,循環結束

在這個過程中,回到主鍵索引樹搜索的過程,我們稱爲回表。可以看到,這個查詢過程讀了k索引樹的3條記錄(步驟1、3和5),回表了兩次(步驟2和4)。

如何進行索引優化,避免回表?

什麼是覆蓋索引?

如果執行的語句是select ID from T where k between 3 and 5,

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