SQL Server - 何时使用Clustered与非Clustered Index?

时间:2013-08-18 22:45:59

标签: sql-server indexing clustered-index non-clustered-index query-tuning

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

例如:如果一个表没有聚集索引,那么应该创建一个非聚集索引并获得执行的好处

1 个答案:

答案 0 :(得分:116)

我只想提出警告:请非常谨慎选择您的聚集索引!每个“常规”数据表都应该有一个聚簇索引,因为拥有聚簇索引确实加快了很多操作 - 是的,加速,甚至插入和删除!但前提是您选择良好聚集索引。

这是SQL Server数据库中最复制的数据结构。聚类键也将是表格中每个非聚集索引的一部分。

选择群集密钥时应特别小心 - 它应该是:

  • 缩小(4字节理想)

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

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

  • 理想情况下不断增加所以你不会最终得到可怕的索引碎片(GUID与一个好的聚类键完全相反 - 出于特殊原因)

  • 它应该是不可空的,理想情况下也是固定的宽度 - varchar(250)构成一个非常差的聚类键

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

查看Kimberly Tripp(索引女王)的一些博客文章 - 她在博客中写的任何内容都绝对无价 - 阅读,消化它 - 靠它生活!