SQLSERVER聚集索引和主键的误区
SQLSERVER聚集索引和主键的误区 很多人会把Primary Key和聚集索引搞混起来,或者认为这是同一个东西。这个概念是非常错误的。 主键是一个约束(constraint),他依附在一个索引上,这个索引可以是聚集索引,也可以是非聚集索引。 所以在一个(或一组)字段上有主键,只能说明他上面有个索引,但不一定就是聚集索引。 例如下面: 1 USE [pratice] 2 GO 3 CREATE TABLE #tempPKCL 4 ( 5 ID INT PRIMARY KEY CLUSTERED --聚集索引 6 ) 7 8 9 --------------------------------- 10 USE [pratice] 11 GO 12 CREATE TABLE #tempPKNCL 13 ( 14 ID INT PRIMARY KEY NONCLUSTERED --非聚集索引 15 ) 16 17 18 DROP TABLE [#tempPKCL] 19 DROP TABLE [#tempPKNCL] 如果不加 NONCLUSTERED 和 CLUSTERED 关键字,默认建的是聚集索引 而一个聚集索引里,是可以有重复值的。只要他没有被同时设为主键,但是主键不能有重复值(不管依附在聚集索引上还是非聚集索引上) 强调这一点,是因为有些人觉得自己的表格上设置了主键