聚集索引和非聚集索引

2021-08-26 11:55:00 字數 2022 閱讀 5684

一種索引,該索引中鍵值的邏輯順序決定了表中相應行的物理順序。 

聚集索引確定表中資料的物理順序。聚集索引類似於**簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。但該索引可以包含多個列(組合索引),就像**簿按姓氏和名字進行組織一樣。 

聚集索引對於那些經常要搜尋範圍值的列特別有效。使用聚集索引找到包含第乙個值的行後,便可以確保包含後續索引值的行在物理相鄰。例如,如果應用程式執行 的乙個查詢經常檢索某一日期範圍內的記錄,則使用聚集索引可以迅速找到包含開始日期的行,然後檢索表中所有相鄰的行,直到到達結束日期。這樣有助於提高此 類查詢的效能。同樣,如果對從表中檢索的資料進行排序時經常要用到某一列,則可以將該錶在該列上聚集(物理排序),避免每次查詢該列時都進行排序,從而節 省成本。 

當索引值唯一時,使用聚集索引查詢特定的行也很有效率。例如,使用唯一雇員 id 列 emp_id 查詢特定雇員的最快速的方法,是在 emp_id 列上建立聚集索引或 primary key 約束。

一種索引,該索引中索引的邏輯順序與磁碟上行的物理儲存順序不同。

索引是通過二叉樹的資料結構來描述的,我們可以這麼理解聚簇索引:索引的葉節點就是資料節點。而非聚簇索引的葉節點仍然是索引節點,只不過有乙個指標指向對應的資料塊。如下圖: 

(非聚集索引)

(聚集索引)

一、深入淺出理解索引結構

實際上,您可以把索引理解為一種特殊的目錄。微軟的sql server提供了兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。下面,我們舉例來說明一下聚集索引和非聚集索引的區別:

其實,我們的漢語字典的正文本身就是乙個聚集索引。比如,我們要查「安」字,就會很自然地翻開字典的前幾頁,因為「安」的拼音是「an」,而按照拼音排序漢字的字典是以英文本母「a」開頭並以「z」結尾的,那麼「安」字就自然地排在字典的前部。如果您翻完了所有以「a」開頭的部分仍然找不到這個字,那麼就說明您的字典中沒有這個字;同樣的,如果查「張」字,那您也會將您的字典翻到最後部分,因為「張」的拼音是「zhang」。也就是說,字典的正文部分本身就是乙個目錄,您不需要再去查其他目錄來找到您需要找的內容。我們把這種正文內容本身就是一種按照一定規則排列的目錄稱為「聚集索引」。

如果您認識某個字,您可以快速地從自動中查到這個字。但您也可能會遇到您不認識的字,不知道它的發音,這時候,您就不能按照剛才的方法找到您要查的字,而需要去根據「偏旁部首」查到您要找的字,然後根據這個字後的頁碼直接翻到某頁來找到您要找的字。但您結合「部首目錄」和「檢字表」而查到的字的排序並不是真正的正文的排序方法,比如您查「張」字,我們可以看到在查部首之後的檢字表中「張」的頁碼是672頁,檢字表中「張」的上面是「馳」字,但頁碼卻是63頁,「張」的下面是「弩」字,頁面是390頁。很顯然,這些字並不是真正的分別位於「張」字的上下方,現在您看到的連續的「馳、張、弩」三字實際上就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的對映。我們可以通過這種方式來找到您所需要的字,但它需要兩個過程,先找到目錄中的結果,然後再翻到您所需要的頁碼。我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為「非聚集索引」。

通過以上例子,我們可以理解到什麼是「聚集索引」和「非聚集索引」。進一步引申一下,我們可以很容易的理解:每個表只能有乙個聚集索引,因為目錄只能按照一種方法進行排序。

二、何時使用聚集索引或非聚集索引

下面的表總結了何時使用聚集索引或非聚集索引(很重要):

動作描述

使用聚集索引

使用非聚集索引

列經常被分組排序應應

返回某範圍內的資料應不應

乙個或極少不同值

不應不應

小數目的不同值應不應

大數目的不同值不應應

頻繁更新的列不應應

外來鍵列應

應主鍵列應應

頻繁修改索引列不應應

聚集索引和非聚集索引

聚集索引和非聚集索引 一 聚集索引和非聚集索引 聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致,聚集索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,因為一旦具有第乙個索引值的紀錄被找到,具有連續索引值的記錄也一定物理的緊跟其後。聚集索引的缺點是對錶進行修改速度...

聚集索引和非聚集索引

本文引自 一種索引,該索引中鍵值的邏輯順序決定了表中相應行的物理順序。聚集索引確定表中資料的物理順序。聚集索引類似於 簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。但該索引可以包含多個列 組合索引 就像 簿按姓氏和名字進行組織一樣。聚集索引對於那些...

聚集索引和非聚集索引

聚集索引和非聚集索引 1 聚集索引 聚集索引,表中的資料儲存位置,根據索引的排序進行實際儲存,因此效率是相當高的。因為聚集索引決定了表中資料行的儲存位置。乙個表不可能有兩個或以上的聚集索引,如果乙個表中已經有乙個聚集索引,那麼這個表中其他的索引都將是非聚集索引。表排列順序 表記錄的排列順序與索引的排...