
淺談 Index Seek 和 Scan 在這邊我們來稍微談一下,什麼是Index Seek 、Index Scan以及Table Scan、Index Scan。真是感嘆世態炎涼阿,有好就有壞,有壞不一定就有好,大家可以看出我標題為何只寫「Index Seek 和Scan」嗎?,原因事是Seek 只有在建Index後才會有可能的發生的事,並且建了Index後,系統可不一定就會用Seek的方式找資料唷,但是若沒建Index 那就一定沒有Seek可以玩啦。 所謂的Scan ,是指查詢後以整個資料表或整個索引的方式讀取資料,而Seek是指在已經排序過的實體資料中,以取一筆或一個區間資料的方式讀取連續性的資料,這聽起來像是再繞口令,大家還是可以從字面上的意思,瞭解其固中的道理。不過,在此我還是以圖形的方式來表達一下好了,請參考下圖。 (圖4) 如上圖,若KEY未經過排序時,系統讀取資料是以逐筆的方式進行,將KEY=2的資料讀取出來,若索引的排序件值與Where 條件不一致,也會發生這樣的情形喔,所以索引的鍵值與查詢的條件可真是密不可分阿。 接下來談談Seek,Seek只有在當實體資料有經過排序後才有的讀取方式,因為已經建立過索引,所以可以透過索引內的指標直接指到對應的資料列,並且讀取連續的區間資料,中間不會花任何時間讀取其他資料。承上例,假設我們已經以KEY欄位鍵過Clustered Index,請參考下圖資料讀取的方式。 如上圖,應該可以看得出讀取資料的箭頭變短了,系統只讀取三筆資料就結束了,因為之後的可以確定是不符合資料的記錄,系統就不多作讀取的動作,可節省不少時間喔。
