SQL Server唯一索引和非唯一索引的區別簡析

2022-07-09 10:10:30 字數 2944 閱讀 5655

1樓:匿名使用者

sql server建立索引時,可以指定unique使之成為唯一索引。「唯一」顧名思義,但是兩都到底有什麼區別呢?因為索引也是一種物理結構,所以還是要從儲存和結構上分析。

索引結構分葉級和非葉級,分析時我們要分開來看,這個很重要。

文中涉及的索引行大小計算,參考msdn估計資料庫大小索引部分。

1. 非唯一聚集索引和唯一聚集索引

建立兩個測試表,各10000條整數,tb1唯一,tb2非唯一,有1000條為9999的重複值。

先查詢索引的一些基本狀況:

從上面的結果可以看到,無論是葉級還是非葉級,非唯一聚集索引的索引行都比唯一的大一些,所以所佔頁也多一點。當然,因為測試資料很小,又是int,所以不明顯。

那到底大在**呢?將兩者的非葉級頁和葉級頁放在一起比一下就知道了。先找出頁號,再用dbcc page來檢視。

通過paul s. randal寫的儲存過程sp_allocationmetadata可以查到根頁和每級索引的首頁。

就挑這兩個頁做對比。

發現多出一個uniquifier,同樣葉級也是一樣。msdn說明:

「如果聚集索引不是唯一的索引,sql server 將新增在內部生成的值(稱為唯一值)以使所有重複鍵唯一。此四位元組的值對於使用者不可見。僅當需要使聚集鍵唯一以用於非聚集索引中時,才新增該值。

」還有uniquifier不是一個全域性自增列,重複記錄增加時此值會發生改變,並且它是一個可為null的變長列。

現在來算一算索引行大小:

兩個表都是隻有一個int型可為null的欄位,而聚集索引葉級是儲存資料本身

葉級是一個4位元組的int列,無變長列,加上3位元組的null點陣圖,再加上4位元組的行頭開銷:兩個表的葉級minsize =4+0+3+4=11

非葉級是一個4位元組的int列,無變長列,加上3位元組的null點陣圖,加上1位元組的行頭開銷,再加6位元組的子頁指標:兩個表的非葉級minsize=4+0+3+1+6=14

tb1的索引行大小是一致的minsize=maxsize,因為它是唯一的。tb2的索引行大小不一致,有大有小,大的索引行是因為:a)不唯一 b)uniquifier

唯一標識列增加了2+1*2+4=8位元組開銷,tb2的min和max相差就是這8位元組。

tb2的葉級maxsize=4+8+3+4=19

tb2的非葉級maxsize=4+8+3+1+6=22

2樓:千鋒教育

這裡說的聚集索引是聚簇索引吧。。。 聚簇索引即建立在聚簇上的索引,建立聚簇索引時,需要對已有表資料重新進行排序(若表中已有資料),即刪除原始的表資料後再將排序結果按物理順序插回,故聚簇索引建立完畢後,建立聚簇索引的列中的資料已經全部按序排列。 一個表中只能包含一個聚簇索引,但該索引可以包含多個列。

b-樹索引中,聚簇索引的葉層就是資料頁。 非聚簇索引類似書本索引,索引與資料存放在不同的物理區域,建立非聚簇索引時資料本身不進行排序。一個表中科含多個非聚簇索引。

b-樹索引中,非聚簇索引的葉層仍是索引頁,其以指標指向資料頁實際儲存位置。 唯一性索引保證表中沒有兩行在定義索引的列上具有重複值,oracle自動為主鍵和唯一鍵列建立唯一索引;主鍵本身就是唯一索引,反之不成立(唯一索引允許一個null值),唯一性索引比非唯一性索引效率高,故在一般情況下,在無重複值的列上應儘量建立唯一性索引。 若為謀個表的某個列建立了唯一索引,則即使這個列沒有唯一值約束,也會被強制限制不能插入重複記錄。

3樓:解0人

顧名思義,

唯一索引,就是是不允許其中任何兩行具有相同索引值的索引,即不允許索引列出現重複值。

非唯一索引,在索引列中可以出現重複值。

祝你成功!

在什麼情況下建表能自動生成 唯一 索引ORACLE資料庫中

建立表同時定義主鍵,會自動建立唯一索引。因為 主鍵 not null unique 例如sql create table test create tab1 2 id int,3 val varchar 10 4 primary key id 5 table created.或者,你建表的時候,對指定...

我和唯一的好友絕交了怎麼辦,和最好的唯一的朋友絕交了很難受怎麼辦

我認為你做的很好了,就算這件事我站在一個旁觀者的角度去看,假如是你的錯,你這樣去道歉認錯,如果對方也像你一樣很看重你們之間的感情一定會接受你的道歉,並且和你和好,回到以前,你也可以在用不同的方法試一次看看能不能和解,如果不能的話,也不要自責,畢竟你也認識到自己的錯誤,不能怪自己。當然俗話說的好,一個...

「惟一」和「唯一」的區別,唯一與惟一區別是什麼

唯一和惟一是一對異形詞。惟和唯本意雖然不同,但自古在限定範圍的意義上通用。由於惟和唯在唯獨 只有的意義上通用,導致惟一和唯一的適用混亂。異形詞使用要遵循通用原則,也要遵循理據原則。唯一與惟一區別是什麼?唯一 跟 惟一 意思完全一樣,是一對異形詞。都可以使用。辭海 和 現代漢語小詞典 對 唯 的解釋是...