當前位置:首頁 » 編程語言 » sql不唯一

sql不唯一

發布時間: 2023-05-11 02:48:53

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

1. 在表和索引設計階段,如果配卜可能,欄位設定為不允許NULL,索引設定為唯一。這樣節約存儲空間並提高了IO效率。
2. 聚集索引鍵列應該盡量選用窄的欄位,因為非聚集索引會引用其鍵列。如果聚集鍵過大則會使非聚集索引同時也佔用更多存儲空間。
3. SQL Server在創建索引時,默認是創建非唯一的培旦穗。所以在創建索引時,要認真考慮是否可遲耐以創建為唯一索引。

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

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

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

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

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

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

view sourceprint?

01.<img onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_402704').style.display='none'; document.getElementById('Code_Open_Image_402704').style.display='inline'; document.getElementById('Code_Open_Text_402704').style.display='inline';"id="Code_Closed_Image_402704"align="top"src=""width="11"height="16"style="display: none;"><img alt="載入中..."title="圖片載入中..."src="http://www.it165.net/statics/images/s_nopic.gif"><img onclick="this.style.display='none'; document.getElementById('Code_Open_Text_402704').style.display='none'; getElementById('Code_Closed_Image_402704').style.display='inline'; getElementById('Code_Closed_Text_402704').style.display='inline';"id="Code_Open_Image_402704"style="display: none;"align="top"src=""width="11"height="16"><img alt="載入中..."title="圖片載入中..."src="http://www.it165.net/statics/images/s_nopic.gif">Codecreate table tb1

02.(col1int);

03.declare@iint=1

04.while@i<10001

05.begin

06.insert into tb1 values(@i);

07.set@i=@i+1;

08.end;

09.create unique clustered index ucix on tb1 (col1)

10.go

11.-------

12.create table tb2

13.(col2int);

14.declare@iint=1

15.while@i<9001

16.begin

17.insert into tb2 values(@i);

18.set@i=@i+1;

19.end;

20.go

21.insert into tb2 values(9999)

22.go1000;

23.create clustered index cix on tb2 (col2)

24.go

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

發現多出一個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

小結:非唯一聚集索引為保證索引鍵值唯一性,會生成UNIQUIFIER與鍵列一起組成索引鍵值。同時無論在葉級還是非葉頁級,都比唯一索引佔用更多存儲空間。

㈢ SQL server 建立的觸發器子查詢返回值不唯一,需要用多個返回值如何操作

問題在
(select商品數目 from購物襪梁車細則where購物車細則.購物車編號=購物車編號)。
這裡面商品數目是多條。
改為
(select商品數目 from購物車細則where購物車細則告敗運.購物車編號=購物枯帶車編號 and 購物車細則.商品編號=商品.商品編號)

㈣ SQL SERVER中怎麼樣在主關鍵字上創建聚集不唯一索引

一個表只能有一個 聚集索引 ,但可以有多個野納神 非聚集索引 設置某列為主鍵,則該列就默認為 聚集索引;
創建了唯一茄陪約束,將自動為其創建 唯一索引, 唯一索引的性能 往往是很差的,所以 建議使頌虧用 主鍵約束;相信您的問題已經得到了解答。。

㈤ SQL SERVER中怎麼樣在主關鍵字上創建聚集不唯一索引

呵,你可以試著在建表時,建雙主鍵!

或者,建一張關聯表,把第一張表的主建,和要讓桐關聯的第二張的主坦州坦建,都放在第三跡鉛張表去,然後進行關聯查尋!這樣表與表之間就能相互取值了

㈥ sql把兩個結果集一對一連接但欄位不唯一

關聯問題。在sql里兩張表帆數中的關聯欄位都是唯一的,關聯之後關聯欄位竟然不態鋒首唯一了。SQL是具有數據操縱和數據定義等多種功能的資料庫語言基者,這種語言具有交互性特點。

㈦ 資料庫語句返回記錄不唯一,會出現什麼現象

返回數據不唯一,就把符合SQL語句條件的所有項都列出來。
查詢語句不會只輪鄭用於精確定位查找,還會有泛查找,比如符合每個條件的許多人,例如都是20歲的,或者都大於多少小於多少等等。
你問這個問題,表示你對SQL語句很不熟悉頃畝,只要你的語句是對的,你的資料庫不要太龐大(如果你查雀桐森詢的范圍太廣,會耗費非常大的資源),就OK

熱點內容
ftp命令使用 發布:2025-07-18 18:13:05 瀏覽:44
辦稅密碼是什麼 發布:2025-07-18 18:12:32 瀏覽:486
linuxftp文件下載 發布:2025-07-18 18:12:30 瀏覽:940
互聯網網站伺服器搭建 發布:2025-07-18 18:01:06 瀏覽:478
安卓手機怎麼辮真偽 發布:2025-07-18 17:13:14 瀏覽:186
java後台json 發布:2025-07-18 17:12:21 瀏覽:680
手機游戲配置主要看哪些 發布:2025-07-18 17:00:47 瀏覽:148
微課源碼 發布:2025-07-18 16:34:44 瀏覽:1001
壓縮長抱枕 發布:2025-07-18 16:13:38 瀏覽:505
如何使用wifi熱點配置網路 發布:2025-07-18 16:06:25 瀏覽:970