clustered

更新时间:2022-11-22 17:00:33 阅读: 评论:0


2022年11月22日发(作者:东营市一中分数线)

SQLSERVER聚集索引和主键(PrimaryKey)的误区认识

很多⼈会把PrimaryKey和聚集索引搞混起来,或者认为这是同⼀个东西。这个概念是⾮常错误的。

主键是⼀个约束(constraint),他依附在⼀个索引上,这个索引可以是聚集索引,也可以是⾮聚集索引。

所以在⼀个(或⼀组)字段上有主键,只能说明他上⾯有个索引,但不⼀定就是聚集索引。

例如下⾯:

复制代码代码如下:

USE[pratice]

GO

CREATETABLE#tempPKCL

(

IDINTPRIMARYKEYCLUSTERED--聚集索引

)

---------------------------------

USE[pratice]

GO

CREATETABLE#tempPKNCL

(

IDINTPRIMARYKEYNONCLUSTERED--⾮聚集索引

)

DROPTABLE[#tempPKCL]

DROPTABLE[#tempPKNCL]

如果不加NONCLUSTERED和CLUSTERED关键字,默认建的是聚集索引

⽽⼀个聚集索引⾥,是可以有重复值的。只要他没有被同时设为主键,但是主键不能有重复值(不管依附在聚集索引上还是⾮

聚集索引上)

强调这⼀点,是因为有些⼈觉得⾃⼰的表格上设置了主键,就认为表格上有聚集索引,按照B-树的⽅式管理了。

如果没有指定主键是个聚集索引,可能表格还是会以堆的⽅式管理,效率低下

--------------------------------------------------------------------------------

排序:建⽴复合索引的时候会指定多个字段,那么这个索引顺序是按哪个字段顺序排序呢?

是按照索引上的第⼀个字段排序

下⾯这个索引的排序顺序是以ID这个字段排序的

1CREATEINDEXtempPKNCL_id_nclON[dbo].[tempPKNCL]([ID],[a],[c])

重复值:如果对多列定义了PRIMARYKEY约束,则⼀列中的值可能会重复,但来⾃PRIMARYKEY约束定义中所有列的任

何值组合必须唯⼀。

如下图所⽰,tVendor表中的ProductID和VendorID列构成了针对此表的复合PRIMARYKEY约束。

这确保了ProductID和VendorID的组合是唯⼀的

意思是说,如果是复合主键,那么如果ProductID列有重复,但是ProductID和VendorID的组合是唯⼀的

⾔下之意:

(1)主键不是复合主键

(2)主键建⽴在ProductID字段上

(3)ProductID字段有重复值

那么主键建⽴肯定会失败

本文发布于:2022-11-22 17:00:33,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/413.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:contested
标签:clustered
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图