88

我知道聚集索引和非聚集索引之间的主要区别,并了解它们的实际工作方式。我了解聚簇和非聚簇索引如何提高读取性能。但有一点我不确定的是,我会选择哪一个的原因是什么。SQL Server - 何时使用群集与非群集索引?

例如:如果一个表没有聚集索引,应在创建一个非聚集索引和什么做

+3

感谢响应。我已经意识到这一点。我的问题是,创建非聚集索引会比创建聚集索引有更多好处 – armulator

+2

是的,你应该避免聚集索引;该列具有较低的基数,没有特定的顺序,经常更新,无序,它是许多列的组合... –

+0

感谢您的回答。它的帮助 – armulator

回答

105

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

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

采摘聚集关键字时,您要特别小心 - 它应该是:

  • (4个字节理想)

  • 独特(它的 “行指针” 后,如果你没有使它独特,SQL Server会在后台为你做这件事,每个条目花费你几个字节乘以你所拥有的行数和非聚集索引的数量 - 这可能是非常昂贵的! )

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

  • 理想不断增加所以你不会有可怕的索引碎片落得(一个GUID是一个很好的聚集键的完全相反 - 为那个特别的原因)

  • 应该非空的,理想也是固定的宽度 - 一个varchar(250)使得一个非常贫穷的聚集键

别的真的应该是这些分落后重要的第二和第三级....

见一些金佰利特里普的(索引女王)博客上的这篇文章 - 任何她写在她的博客绝对是无价的 - 阅读它,消化它 - 靠它活着!

+1

感谢marc_s的明确解释。但从技术上讲,“非群集”指数对我们有什么作用。它的重要性是什么? – BNN

+0

@nad:精心挑选的非聚集索引可以加快搜索速度,而不必将数百万行数据与您的搜索条件进行比较,只需4,5次比较即可找到给定的行。这使***巨大的差异! –

+0

@marc_s为什么它会加速插入的性能? – MuriloKunze

相关问题