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


99

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

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


3
感谢您的回应。我已经知道了。我的问题是,在
某些

2
是的,您应避免在以下情况下使用聚集索引:该列具有低基数,没有特定的顺序,经常更新,不顺序,它是许多列的组合...
TI

感谢您的回答。它的帮助
手臂的


Answers:


117

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

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

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

  • (4字节理想)

  • 唯一的(毕竟是“行指针”。如果没有使它唯一,则SQL Server将在后台为您完成此操作,每个条目的开销为几个字节乘以行数和非聚集索引数)您拥有-这可能会非常昂贵!)

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

  • 理想情况下,它会不断增加,因此您最终不会遇到可怕的索引碎片(由于特定原因,GUID与好的群集键完全相反)

  • 它应该不可为空,并且理想情况下也应为固定宽度-a varchar(250)使群集密钥非常糟糕

在这些观点之后,其他任何事情都应该真正成为第二和第三重要级别。

请参阅Kimberly Tripp(The Queen of Indexing)的有关该主题的博客文章-她在博客中所写的任何内容绝对是无价之宝-阅读,整理,实践!


1
感谢marc_s提供清晰的解释。但是从技术上来讲,non clustered索引对我们有什么作用。它的重要性是什么?
hud

@nad:精心选择的非聚集索引可以加快搜索速度-无需将潜在的数百万行数据与搜索条件进行比较,您只需进行4、5个比较就可以找到给定的行。那有很大的不同!
marc_s

1
@MuriloKunze:读金Tripp的博客文章的话题 -她说的很详细,为什么是这样的话
marc_s

5
抱歉,“ SQL Server-何时使用群集索引与非群集索引”的答案在哪里??
爱德华
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.