深入淺出理解索引

2021-08-27 02:56:05 字數 1818 閱讀 8725

(一)深入淺出理解索引結構

實際上,您可以把索引理解為一種特殊的目錄。

sql server提供了兩種索引:

聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。下面,我們舉例來說明一下聚集索引和非聚集索引的區別。

其實,我們的漢語字典的正文本身就是乙個聚集索引。比如,我們要查「安

」字,就會很自然地翻開字典的前幾頁,因為「安

」的拼音是

「an」

,而按照拼音排序漢字的字典是以英文本母

「a」開頭並以

「z」結尾的,那麼「安

」字就自然地排在字典的前部。如果您翻完了所有以

「a」開頭的部分仍然找不到這個字,那麼就說明您的字典中沒有這個字

;同樣的,如果查「張

」字,那您也會將您的字典翻到最後部分,因為「張

」的拼音是

「zhang」

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

我們把這種正文內容本身就是一種按照一定規則排列的目錄稱為

「聚集索引」。

如果您認識某個字,您可以快速地從自典中查到這個字。但您也可能會遇到您不認識的字,不知道它的發音,這時候,您就不能按照剛才的方法找到您要查的字,而需要去根據

「偏旁部首

」查到您要找的字,然後根據這個字後的頁碼直接翻到某頁來找到您要找的字。但您結合

「部首目錄」和

「檢字表

」而查到的字的排序並不是真正的正文的排序方法,比如您查「張

」字,我們可以看到在查部首之後的檢字表中「張

」的頁碼是

672頁,檢字表中「張

」的上面是「馳

」字,但頁碼卻是

63頁,「張

」的下面是「弩

」字,頁面是

390頁。很顯然,這些字並不是真正的分別位於「張

」字的上下方,現在您看到的連續的

「馳、張、弩

」三字實際上就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的對映。我們可以通過這種方式來找到您所需要的字,但它需要兩個過程,先找到目錄中的結果,然後再翻到您所需要的頁碼。

我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為

「非聚集索引」。

通過以上例子,我們可以理解到什麼是

「聚集索引」和

「非聚集索引」。

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

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

下面的表總結了何時使用聚集索引或非聚集索引

(很重要)。

動作描述

使用聚集索引

使用非聚集索引

外來鍵列 應

應主鍵列 應

應列經常被分組排序

(order by)應

應 返回某範圍內的資料 應

不應小數目的不同值 應

不應大數目的不同值 不應

應頻繁更新的列 不應

應 頻繁修改索引列 不應

應乙個或極少不同值 不應

不應事實上,我們可以通過前面聚集索引和非聚集索引的定義的例子來理解上表。如:返回某範圍內的資料一項。比如您的某個表有乙個時間列,恰好您把聚合索引建立在了該列,這時您查詢

2023年1

月1日至2023年10

月1日之間的全部資料時,這個速度就將是很快的,因為您的這本字典正文是按日期進行排序的,聚類索引只需要找到要檢索的所有資料中的開頭和結尾資料即可

;而不像非聚集索引,必須先查到目錄中查到每一項資料對應的頁碼,然後再根據頁碼查到具體內容。

深入淺出理解索引

一 深入淺出理解索引結構 實際上,您可以把索引理解為一種特殊的目錄。sql server提供了兩種索引 聚集索引 clustered index,也稱聚類索引 簇集索引 和非聚集索引 nonclustered index,也稱非聚類索引 非簇集索引 下面,我們舉例來說明一下聚集索引和非聚集索引的區別...

深入淺出理解索引結構 2

四 其他書上沒有的索引使用經驗總結 1 用聚合索引比用不是聚合索引的主鍵速度快 下面是例項語句 都是提取 25萬條資料 select gid,fariqi,neibuyonghu,reader,title from tgongwen where fariqi 2004 9 16 3326毫秒 sel...

04 深入淺出索引

索引的常見模型 innodb索引模型 每乙個索引在innodb中都對應一顆b 樹。主鍵索引的葉子結點存的是整行資料 聚簇索引 非主鍵索引的葉子結點儲存的是主鍵值 二級索引 也就是說基於二級索引的查詢會有一次回表。索引維護 b 樹為了維護有序性,在插入新值的時候需要做必要的維護。自增主鍵 每次插入都是...