1. 程式人生 > 其它 >sql server 聚集索引,非聚集索引,Identity ,gudi,主鍵的概念和比較

sql server 聚集索引,非聚集索引,Identity ,gudi,主鍵的概念和比較

索引

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

聚集索引和非集聚索引

聚集索引:該索引中鍵值的邏輯順序決定了表中相應行的物理順序。
非聚集索引:該索引中索引的邏輯順序與磁碟上行的物理儲存順序不同。
索引是通過二叉樹的資料結構來描述的,我們可以這麼理解聚集索引:索引的葉節點就是資料節點。而非聚集索引的葉節點仍然是索引節點,只不過有一個指標指向對應的資料塊。

聚集索引圖:

葉子節點就是真實的資料節點

非集聚索引圖:


葉子節點也是資料節點,該節點儲存的是真實資料的記憶體地址。

Identity

identity表示該欄位的值會自動更新,如果我們設定了識別符號,並且設定自增和自增種子,那麼資料庫裡面的改欄位就會按照我們的自增種子自動進行遞增,通常我們使用改欄位作為主鍵。

gudi

全域性唯一識別符號(GUID,Globally Unique Identifier)是一種由演算法生成的二進位制長度為128位的數字識別符號。GUID主要用於在擁有多個節點、多臺計算機的網路或系統中。在理想情況下,任何計算機和計算機叢集都不會生成兩個相同的GUID。GUID 的總數達到了2128(3.4×1038)個,所以隨機生成兩個相同GUID的可能性非常小,但並不為0。所以,用於生成GUID的演算法通常都加入了非隨機的引數(如時間),以保證這種重複的情況不會發生。

GUID一詞有時也專指微軟對UUID標準的實現。

在 Windows 平臺上,GUID 廣泛應用於微軟的產品中,用於標識如登錄檔項、類及介面標識、資料庫、系統目錄等物件。

主鍵

通常選擇自增int作為主鍵,除非有特殊需要,並且還讓SQL Server自動生成/維護該欄位。
由於聚類鍵的GUID並不是最優的,因為它的隨機性,它將導致大量的頁面和索引碎片,並且通常會導致效能下降。
因為主鍵預設是聚集索引,所以我們再使用guid作為主鍵的時候資料量比較大的話就有效能問題。
但是如果資料量小就放心的使用吧,但是如果是分散式的資料庫,又不能用int作為主鍵怎麼辦,這個時候我們可以選擇兩種方式混合用,再自己的資料庫用int 這樣查詢和修改就比較快,同時使用guid作為唯一標識,其它表關聯的外來鍵就用gudi來關聯,這樣查詢關聯資料的時候就使用非集聚索引,完美解決!