【问题标题】:what is a difference between Clustered Index and Unique Index?聚集索引和唯一索引有什么区别?
【发布时间】:2011-06-10 08:44:55
【问题描述】:

我刚刚学习 SQL Server 中的索引,但对聚集索引和唯一索引感到困惑。如果两者都应用于唯一键列,例如:PersonID。那么两者之间有什么区别。

谢谢。

【问题讨论】:

  • 基本上,clusteredunique 是索引的两个不同且独立的特征。
  • @Andriy M - 您应该将其发布为答案。
  • @Jeff O:谢谢。这不能满足 OP 的最终要求,我无法相信自己有更完整的答案。

标签: sql-server sql-server-2005 sql-server-2008


【解决方案1】:

两者无关:

  • “唯一”确保每个值恰好只出现一次
  • “集群”是数据在磁盘上的排列方式

您可以拥有所有 4 种排列:

  • “唯一非集群”
  • “唯一集群”
  • “非唯一非集群”
  • “非唯一集群”

由于 SQL Server 中“主键”(PK) 的默认设置是集群的,所以会出现一些混淆。

“主键”必须始终是唯一的。 “unique”和“PK”的区别在于unique允许一个NULL,PK不允许任何NULL。

最后,一些数量限制

  • 因为聚集是指磁盘上的布局,所以每个表只能有一个聚集索引
  • 一个表不能有多个主键,但可以有多个唯一索引

【讨论】:

  • @iMatoria:是的,有 2 个注意事项: 1. 默认情况下,在 SQL Server 中,PK 将被集群。 2. PK 不允许 NULL,“唯一集群”允许一个
  • 考虑到这一点,PK 不属于上述 4 种排列中的任何一种?或者是否还有 2 个排列:1.clustered。 2. 非集群。抱歉,如果我遗漏了什么并且您已经提到过。
  • @iMatoria:当您创建主键 (CREATE/ALTER TABLE) 或索引 (CREATE INDEX) 时,您可以提及 CLUSTERED 或 NONCLUSTERED(没有第三个选项)。如果您不提及它,它将默认为 PK 的 CLUSTERED,索引的 NONCLUSTERED。所以基本上,是的,PK 是“独特的集群”:我试图解释为什么会这样,抱歉。有时(不经常)你会发现一个非集群 PK 与另一个集群索引更适合你的查询
  • 太棒了,这是完美的解释。对此投赞成票。如果我必须总结您之前关于 PK 的 2 个 cmets,那将是:PK 是“唯一聚集”索引,具有不允许 NULL 值的额外内容,这就是 PK 与唯一键的简单不同之处。无论如何,谢谢。
  • PK 和 UQ 之间还有一个区别,即您只能在一个表中声明一个 PK,而您可以在一个表中声明多个 UQ
【解决方案2】:

唯一索引只是具有唯一约束的索引,仅此而已。聚集索引在物理上对磁盘上的数据进行排序以匹配索引。如果您经常只通过一列访问表中的数据,这很有用,例如通过主键。此外,一张表只能有一个聚集索引(当然是显而易见的)。

【讨论】:

  • 谢谢,您所说的聚集索引对磁盘上的物理数据进行排序是什么意思?
  • 向表中插入数据时,通常没有特定的顺序。它只是被插入某处。当你有一个聚集索引时,磁盘上的数据按你创建聚集索引的键排序。 e. G。您有一个带有整数字段 ifield 的表,并在其上创建一个聚集索引。然后磁盘上的数据将按整数字段 ifield 升序排列。先用ifield=1记录,再用ifield=2记录,以此类推,pp
  • 再次感谢,但还有一个问题,当我们在其中定义任何主键时,默认情况下每个表都有一个聚集索引?或者我们必须创建它。
  • 不,默认情况下没有聚集索引。聚集索引具有广泛的影响。每个 UPDATE、INSERT 或 DELETE 语句都可能变得非常慢,因为 DBMS 必须在磁盘上物理地重新排序表。仅在您确实需要聚集索引或确定 UPDATE/DELETE/INSERT 非常罕见时才使用它们。
  • pk 默认是 SQL server 中的聚集索引。
【解决方案3】:

一种粗略的思考方式是考虑电话簿。聚集索引是页面写入的顺序。任何其他索引都是单独的列表,显示要转到哪个页面。

例如,电话簿“聚集”在姓氏上,但您可能还想按街道查找,这样您就会有一个单独的列表,说明住在假街道上的人在第 3,45 和 63 页等

【讨论】:

    【解决方案4】:

    AFAIK 每个表通常只能有一个作为主键的聚集索引,但它可能有 m 个唯一索引。

    更多:http://decipherinfosys.wordpress.com/2007/07/04/back-to-the-basics-difference-between-primary-key-and-unique-index/

    【讨论】:

      猜你喜欢
      • 2010-09-10
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2014-06-04
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多