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

索引

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

聚集索引和非集聚索引

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

聚集索引圖:

image.png

葉子節點就是真實的數據節點

非集聚索引圖:

image.png
葉子節點也是數據節點,該節點存儲的是真實數據的內存地址。

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來關聯,這樣查詢關聯數據的時候就使用非集聚索引,完美解決!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章