SQL Server – 何时使用群集与非群集索引?

我知道群集和非群集索引之间的主要区别,并且了解它们是如何工作的。 我了解聚簇和非聚簇索引如何提高读取性能。 但有一点我不确定,那就是我会select一个的原因是什么。

例如:如果一个表没有聚集索引,是否应该创build一个非聚集索引,以及做什么的好处

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

这是SQL Server数据库中最复制的数据结构。 集群密钥也将成为表中每个非聚集索引的一部分。

在select集群密钥时应该非常小心 – 它应该是:

  • (4个字节的理想)

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

  • 静态 (从不改变 – 如果可能的话)

  • 理想情况下不断增加,所以你不会结束可怕的索引碎片(一个GUID是一个好的集群关键的完全相反 – 出于这个特定的原因)

  • 它应该是不可空的,理想情况下也是固定的宽度 – varchar(250)是一个非常糟糕的集群密钥

其他任何东西都应该是这些观点背后的重要的第二和第三层次….

看到金伯利·特里普( Queen of Indexing )的一些关于这个话题的博客文章 – 她写在她的博客上的任何东西都是无价的 – 阅读它,消化它 – 靠它活着!

  • GUID作为PRIMARY KEY和/或集群密钥
  • 聚集索引辩论继续…
  • 不断增加的集群密钥 – 聚集索引辩论……….再次!
  • 磁盘空间很便宜 – 这不是重点!
Interesting Posts