您何时更喜欢使用非聚集索引而不是聚簇索引?

时间:2014-08-18 05:53:52

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

我对使用聚簇索引和非聚簇索引有一些了解,但我不确定何时以及在什么条件下使用非聚簇索引而不是聚簇索引会有所帮助。有人可以解释或提供一些链接,以便它对我们所有人都有帮助。

2 个答案:

答案 0 :(得分:1)

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

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

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

  • 缩小(4字节理想)

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

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

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

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

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

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

答案 1 :(得分:0)

非聚集索引对于具有某些重复值的列很有用。 当我们为表创建主键时,会自动创建聚簇索引。我们需要处理非聚集索引的创建。 clusched索引是每个表一个,在创建聚簇索引时,SQL Server 2005读取该列并在其上形成二进制树。然后将该二进制树信息分别存储在盘中。通过使用二叉树,现在基于列搜索特定值会将比较次数减少到很多。