目前分類:SQL Server Index (2)

瀏覽方式: 標題列表 簡短摘要

淺談 Index Seek 和 Scan

在這邊我們來稍微談一下,什麼是Index Seek 、Index Scan以及Table Scan、Index Scan。真是感嘆世態炎涼阿,有好就有壞,有壞不一定就有好,大家可以看出我標題為何只寫「Index Seek 和Scan」嗎?,原因事是Seek 只有在建Index後才會有可能的發生的事,並且建了Index後,系統可不一定就會用Seek的方式找資料唷,但是若沒建Index 那就一定沒有Seek可以玩啦。

所謂的Scan ,是指查詢後以整個資料表或整個索引的方式讀取資料,而Seek是指在已經排序過的實體資料中,以取一筆或一個區間資料的方式讀取連續性的資料,這聽起來像是再繞口令,大家還是可以從字面上的意思,瞭解其固中的道理。不過,在此我還是以圖形的方式來表達一下好了,請參考下圖。

clip_image002

(圖4)

如上圖,若KEY未經過排序時,系統讀取資料是以逐筆的方式進行,將KEY=2的資料讀取出來,若索引的排序件值與Where 條件不一致,也會發生這樣的情形喔,所以索引的鍵值與查詢的條件可真是密不可分阿。

接下來談談Seek,Seek只有在當實體資料有經過排序後才有的讀取方式,因為已經建立過索引,所以可以透過索引內的指標直接指到對應的資料列,並且讀取連續的區間資料,中間不會花任何時間讀取其他資料。承上例,假設我們已經以KEY欄位鍵過Clustered Index,請參考下圖資料讀取的方式。

clip_image004

如上圖,應該可以看得出讀取資料的箭頭變短了,系統只讀取三筆資料就結束了,因為之後的可以確定是不符合資料的記錄,系統就不多作讀取的動作,可節省不少時間喔。

接下來我們來介紹幾種資料搜尋的方式:

一、Table Scan(資料表掃描):

  這種掃描的方式,是在當一個資料表沒有建立任何Clustered Index 時所採取的資料搜尋方式,也就是實體資料以Heap架構存放時的處理方式。

二、Clustered Index Scan(叢集索引掃描):

  這種搜尋方式,是當資料表有建立叢集索引鍵,但是在找詢資料時並非有效的利用到實體資料排序。

貓肥熊(胖達師) 發表在 痞客邦 留言(0) 人氣()

                   SQL Server Index 架構介紹 

  最近因為公司需求開始重新接觸到SQL Server,因為之前接觸的都是Oracle,所以就到MSDN 惡補了一些觀念,其實以前就對DBA有濃厚的興趣了,可是專案實在太忙了。如今只好利用閒暇之餘猛上網K原文技術文件。因為工作主要的是調整效能,所以就從SQL Server 的索引看起,順便把心得寫下來放在自己的部落格,充充人頭。因為我是讀原文的有些有解釋錯誤或是觀念錯誤也煩請指正一下喔,接下來就開始介紹吧。 

SQL Server 的索引分類

貓肥熊(胖達師) 發表在 痞客邦 留言(11) 人氣()