SQLSERVER集合索引和主鍵(Primary Key)的誤區熟悉。本站提示廣大學習愛好者:(SQLSERVER集合索引和主鍵(Primary Key)的誤區熟悉)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLSERVER集合索引和主鍵(Primary Key)的誤區熟悉正文
許多人會把Primary Key和集合索引弄混起來,或許以為這是統一個器械。這個概念長短常毛病的。
主鍵是一個束縛(constraint),他依靠在一個索引上,這個索引可所以集合索引,也能夠長短集合索引。
所以在一個(或一組)字段上有主鍵,只能解釋他下面有個索引,但紛歧定就是集合索引。
例以下面:
USE [pratice]
GO
CREATE TABLE #tempPKCL
(
ID INT PRIMARY KEY CLUSTERED --集合索引
)
---------------------------------
USE [pratice]
GO
CREATE TABLE #tempPKNCL
(
ID INT PRIMARY KEY NONCLUSTERED --非集合索引
)
DROP TABLE [#tempPKCL]
DROP TABLE [#tempPKNCL]
假如不加NONCLUSTERED和CLUSTERED症結字,默許建的是集合索引
而一個集合索引裡,是可以有反復值的。只需他沒有被同時設為主鍵,然則主鍵不克不及有反復值(不論依靠在集合索引上照樣非集合索引上)
強調這一點,是由於有些人認為本身的表格上設置了主鍵,就以為表格上有集合索引,依照B-樹的方法治理了。
假如沒有指定主鍵是個集合索引,能夠表格照樣會以堆的方法治理,效力低下
--------------------------------------------------------------------------------
關於排序和反復值:
排序:樹立復合索引的時刻會指定多個字段,那末這個索引次序是按哪一個字段次序排序呢?
是依照索引上的第一個字段排序
上面這個索引的排序次序是以ID這個字段排序的
1 CREATE INDEX tempPKNCL_id_ncl ON [dbo].[tempPKNCL]([ID],[a],[c])
反復值:假如對多列界說了 PRIMARY KEY 束縛,則一列中的值能夠會反復,但來自 PRIMARY KEY 束縛界說中一切列的任何值組合必需獨一。
以下圖所示,Purchasing.ProductVendor 表中的 ProductID 和 VendorID 列組成了針對此表的復合 PRIMARY KEY 束縛。
這確保了 ProductID 和 VendorID 的組合是獨一的
意思是說,假如是復合主鍵,那末假如ProductID列有反復,然則 ProductID 和 VendorID 的組合是獨一的
言下之意:
(1)主鍵不是復合主鍵
(2)主鍵樹立在ProductID字段上
(3)ProductID字段有反復值
那末主鍵樹立確定會掉敗