103

我知道聚集索引和非聚集索引之间的主要区别,并且了解它们的实际工作方式。我了解聚集索引和非聚集索引如何提高读取性能。但我不确定的一件事是,我选择其中一个而不是另一个的原因是什么。

例如:如果一张表没有聚集索引,是否应该创建一个非聚集索引,这样做有什么好处

4

1 回答 1

120

我只想说一句警告:请非常小心地选择您的聚集索引!每个“常规”数据表都应该有一个聚集索引,因为有一个聚集索引确实可以加速很多操作——是的,加速,甚至插入和删除!但前提是你选择了一个好的聚集索引。

它是SQL Server 数据库中复制最多的数据结构。聚集键也将成为表上每个非聚集索引的一部分。

选择群集键时应格外小心 - 它应该是:

  • (4 字节理想)

  • 唯一的(毕竟它是“行指针”。如果你不让它成为唯一的,SQL Server 会在后台为你做这件事,每个条目花费你几个字节乘以行数和非聚集索引的数量你有 - 这可能非常昂贵!)

  • 静态的(永远不要改变 - 如果可能的话)

  • 理想情况下不断增加,因此您不会以可怕的索引碎片告终(GUID 与良好的集群键完全相反 - 出于这个特殊原因)

  • 它应该是不可为空的,并且理想情况下也是固定宽度 - avarchar(250)是一个非常糟糕的聚类键

其他任何事情都应该是这些点之后的第二和第三级重要性....

请参阅 Kimberly Tripp(索引女王)关于该主题的一些博客文章 - 她在博客中所写的任何内容都绝对是无价之宝 - 阅读、消化 - 以它为生!

于 2013-08-19T04:41:08.453 回答