SQLSERVER聚集索引和主键的误区
发布时间:2020-12-12 13:33:30 所属栏目:MsSql教程 来源:网络整理
导读:主键是一个约束(constraint),他依附在一个索引上,这个索引可以是聚集索引,也可以是非聚集索引。 所以在一个(或一组)字段上有主键,只能说明他上面有个索引,但不一定就是聚集索引。 例如下面: 1 USE [ pratice ] 2 GO 3 CREATE TABLE #tempPKCL 4 (
主键是一个约束(constraint),他依附在一个索引上,这个索引可以是聚集索引,也可以是非聚集索引。 所以在一个(或一组)字段上有主键,只能说明他上面有个索引,但不一定就是聚集索引。 例如下面: 1 USE [pratice] 2 GO 3 CREATE TABLE #tempPKCL 4 ( 5 ID INT PRIMARY KEY CLUSTERED --聚集索引 6 ) 7 8 9 ------------------------------- 10 11 12 #tempPKNCL 13 14 ID NONCLUSTERED 非聚集索引 15 16 17 18 DROP TABLE #tempPKCL19 #tempPKNCL] 如果不加NONCLUSTERED和CLUSTERED关键字,默认建的是聚集索引 ? 而一个聚集索引里,是可以有重复值的。只要他没有被同时设为主键,但是主键不能有重复值(不管依附在聚集索引上还是非聚集索引上) 强调这一点,是因为有些人觉得自己的表格上设置了主键,就认为表格上有聚集索引,按照B-树的方式管理了。 如果没有指定主键是个聚集索引,可能表格还是会以堆的方式管理,效率低下 关于排序和重复值: 排序:建立复合索引的时候会指定多个字段,那么这个索引顺序是按哪个字段顺序排序呢? 是按照索引上的第一个字段排序 下面这个索引的排序顺序是以ID这个字段排序的 1 INDEX tempPKNCL_id_ncl ON dbo].tempPKNCL](ID],ac])(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |