Itzik984 Asked: 2012-02-02 07:57:22 +0800 CST2012-02-02 07:57:22 +0800 CST 2012-02-02 07:57:22 +0800 CST 聚集索引总是比非聚集索引好? 772 当我在“A”上有一个聚簇索引时,即使我有,最好还是使用这个聚簇索引 选择'A =常数'?如果不是,为什么? 谢谢! sql-server clustered-index 2 个回答 Voted Best Answer marc_s 2012-02-02T08:20:04+08:002012-02-02T08:20:04+08:00 我只想提醒一句:请非常小心地选择聚集索引! 它是SQL Server 数据库中复制次数最多的数据结构(假设它是您正在谈论的 SQL Server)。聚簇键也将成为表中每个非聚簇索引的一部分——当然在叶级,也可能在索引导航结构中。 选择集群密钥时应格外小心——它应该是: 窄(4 字节理想) 唯一(毕竟它是“行指针”——如果你不让它唯一,SQL Server 会——为你——在后台——为每个条目花费几个字节——乘以行数和您拥有的非聚集索引 - 可能非常昂贵!) 静态(永远不要改变——如果可能的话) 理想情况下不断增加,这样你就不会以可怕的索引碎片结束(GUID 是一个好的集群键的对立面 - 出于这个特殊原因) 它应该是不可空的,理想情况下也固定为 - avarchar(250)是一个非常差的集群键 其他任何事情都应该排在这些点之后的第二和第三位…… 查看 Kimberly Tripp(索引女王)关于该主题的一些博客文章 - 她在博客中写的任何内容都绝对是无价的 - 阅读它,消化它 - 靠它生活! GUID 作为 PRIMARY KEY 和/或集群键 聚集索引争论仍在继续…… 不断增加的聚簇键 - 聚簇索引辩论............再次! Blorgbeard 2012-02-02T08:07:13+08:002012-02-02T08:07:13+08:00 是的。 实际上,我不确定在这种情况下您不会如何使用索引。聚簇索引包含实际的行数据。这就是为什么只能有一个聚簇索引的原因。所有非聚集索引都包含指向实际数据的指针。 因此,使用聚集索引可以节省您从索引到数据的查找。
我只想提醒一句:请非常小心地选择聚集索引!
它是SQL Server 数据库中复制次数最多的数据结构(假设它是您正在谈论的 SQL Server)。聚簇键也将成为表中每个非聚簇索引的一部分——当然在叶级,也可能在索引导航结构中。
选择集群密钥时应格外小心——它应该是:
窄(4 字节理想)
唯一(毕竟它是“行指针”——如果你不让它唯一,SQL Server 会——为你——在后台——为每个条目花费几个字节——乘以行数和您拥有的非聚集索引 - 可能非常昂贵!)
静态(永远不要改变——如果可能的话)
理想情况下不断增加,这样你就不会以可怕的索引碎片结束(GUID 是一个好的集群键的对立面 - 出于这个特殊原因)
它应该是不可空的,理想情况下也固定为 - a
varchar(250)
是一个非常差的集群键其他任何事情都应该排在这些点之后的第二和第三位……
查看 Kimberly Tripp(索引女王)关于该主题的一些博客文章 - 她在博客中写的任何内容都绝对是无价的 - 阅读它,消化它 - 靠它生活!
是的。
实际上,我不确定在这种情况下您不会如何使用索引。聚簇索引包含实际的行数据。这就是为什么只能有一个聚簇索引的原因。所有非聚集索引都包含指向实际数据的指针。
因此,使用聚集索引可以节省您从索引到数据的查找。