使用聚集索引和非聚集索引的區別

2021-08-07 02:58:04 字數 2832 閱讀 9471

使用情景

注意事項

效能對比

使用聚集索引

聚集索引確定表中資料的物理順序。聚集索引類似於**簿。由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。

但該索引可以包含多個列(組合索引),就像**簿按姓氏和名字進行組織一樣。

聚集索引對於那些經常要搜尋範圍值的列特別有效。使用聚集索引找到包含第乙個值的行後,便可以確保包含後續索引值的行在物理相鄰。避免每次查詢該列時都進行排序,從而節省成本。

注意事項

定義聚集索引鍵時使用的列越少越好。

包含大量非重複值的列。

使用下列運算子返回乙個範圍值的查詢:between、>、>=、< 和 <=。

被連續訪問的列。

返回大型結果集的查詢。

經常被使用聯接或 group by 子句的查詢訪問的列;一般來說,這些是外來鍵列。對 order by 或 group by 子句中指定的列進行索引,可以使 sql server 不必對資料進行排序,因為這些行已經排序。這樣可以提高查詢效能。

oltp 型別的應用程式,這些程式要求進行非常快速的單行查詢(一般通過主鍵)。應在主鍵上建立聚集索引。

聚集索引不適用於:

頻繁更改的列 。這將導致整行移動(因為 sql server 必須按物理順序保留行中的資料值)。這一點要特別注意,因為在大資料量事務處理系統中資料是易失的。

寬鍵 。寬鍵是若干列或若干大型列的組合。所有非聚集索引將聚集索引中的鍵值用作查詢鍵。

為同一表定義的任何非聚集索引都將增大許多,這是因為非聚集索引項包含聚集鍵,同時也包含為此非聚集索引定義的鍵列。

使用非聚集索引

非聚集索引與課本中的目錄類似。資料儲存在乙個地方,索引儲存在另乙個地方,索引帶有指標指向資料的儲存位置。索引中的專案按索引鍵值的順序儲存,而表中的資訊按另一種順序儲存(這可以由聚集索引規定)。

如果在表中未建立聚集索引,則無法保證這些行具有任何特定的順序。

多個非聚集索引

有些書籍包含多個索引。例如,一本介紹園藝的書可能會包含乙個植物通俗名稱索引,和乙個植物學名索引,因為這是讀者查詢資訊的兩種最常用的方法。對於非聚集索引也是如此。

可以為在表中查詢資料時常用的每個列建立乙個非聚集索引。

注意事項

在建立非聚集索引之前,應先了解您的資料是如何被訪問的。可考慮將非聚集索引用於:

包含大量非重複值的列,如姓氏和名字的組合(如果聚集索引用於其它列)。如果只有很少的非重複值,如只有 1 和 0,則大多數查詢將不使用索引,因為此時表掃瞄通常更有效。

不返回大型結果集的查詢。

返回精確匹配的查詢的搜尋條件(where 子句)中經常使用的列。

經常需要聯接和分組的決策支援系統應用程式。應在聯接和分組操作中使用的列上建立多個非聚集索引,在任何外來鍵列上建立乙個聚集索引。

在特定的查詢中覆蓋乙個表中的所有列。這將完全消除對錶或聚集索引的訪問。

索引都是一種排序,只是聚集索引的排序和物理表中的資料排序相同,一致的;而非聚集索引的排序和物理表資料的排序不同。

當我們在更新統計資訊的時候,對於那些聚集索引列不但要更新索引頁還要同時對資料物理表資料重新排序;而對非聚集索引列則只需要更新索引頁。

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

下面,我們舉例來說明一下聚集索引和非聚集索引的區別:

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

也就是說,字典的正文部分本身就是乙個目錄,您不需要再去查其他目錄來找到您需要找的內容。

我們把這種正文內容本身就是一種按照一定規則排列的目錄稱為「聚集索引」。

如果您認識某個字,您可以快速地從自典中查到這個字。但您也可能會遇到您不認識的字,不知道它的發音,這時候,您就不能按照剛才的方法找到您要查的字,而需要去根據「偏旁部首」查到您要找的字,然後根據這個字後的頁碼直接翻到某頁來找到您要找的字。但您結合「部首目錄」和「檢字表」而查到的字的排序並不是真正的正文的排序方法,比如您查「張」字,我們可以看到在查部首之後的檢字表中「張」的頁碼是672頁,檢字表中「張」的上面是「馳」字,但頁碼卻是63頁,「張」的下面是「弩」字,頁面是390頁。

很顯然,這些字並不是真正的分別位於「張」字的上下方,現在您看到的連續的「馳、張、弩」三字實際上就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的對映。我們可以通過這種方式來找到您所需要的字,但它需要兩個過程,先找到目錄中的結果,然後再翻到您所需要的頁碼。

我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為「非聚集索引」。

通過以上例子,我們可以理解到什麼是「聚集索引」和「非聚集索引」。

進一步引申一下,我們可以很容易的理解:每個表只能有乙個聚集索引,因為目錄只能按照一種方法進行排序。

(二)何時使用聚集索引或非聚集索引

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

事實上,我們可以通過前面聚集索引和非聚集索引的定義的例子來理解上表。如:返回某範圍內的資料一項。

比如您的某個表有乙個時間列,恰好您把聚合索引建立在了該列,這時您查詢2023年1月1日至2023年10月1日之間的全部資料時,這個速度就將是很快的,因為您的這本字典正文是按日期進行排序的,聚類索引只需要找到要檢索的所有資料中的開頭和結尾資料即可;而不像非聚集索引,必須先查到目錄中查到每一項資料對應的頁碼,然後再根據頁碼查到具體內容。

《搜尋引擎的使用技巧》教學設計

一 教材分析 在資訊社會,面對紛繁複雜的資訊,高效地獲取有用的資訊來支撐自己的學習和工作,是新世紀青少年學生必須具備的資訊素養之一。本節旨在培養和提公升學生獲取網路資訊的能力,使其成為每位學生在資訊社會必須掌握的生存技能,並為學生學會有效組織和處理資訊奠定基礎,是學生繼續學習和不斷發展的不竭動力。i...

搜尋引擎的含義及使用技巧

周次日期授課學 1學時時 授課內容2.4 搜尋引擎的含義及使用技巧 教學目的了解搜尋引擎的含義,掌握搜尋引擎的使用技巧 教學重點搜尋引擎的使用技巧 教學難點將常用的搜尋引擎使用技巧指導實踐,提高檢索率 教學方法講授法 2.4.1搜尋引擎 搜尋引擎是指根據一定的策略 運用特定的電腦程式蒐集網際網路上的...

Google搜尋引擎的使用》實驗報告格式 新

實驗報告 課程名稱計算機資訊檢索 實驗專案名稱google搜尋引擎的使用 課程班級與座位號 實驗室名稱 或課室 專業任課教師羅東俊老師 學號姓名 實驗日期 2010 年 12 月 1 日廣東商學院教務處制 姓名實驗報告成績 評語 指導教師 簽名 年月日說明 指導教師評分後,實驗報告交院 系 辦公室儲...