【问题标题】:SQL Server - When to use Clustered vs non-Clustered Index?SQL Server - 何时使用聚集索引与非聚集索引?
【发布时间】:2013-08-20 16:38:45
【问题描述】:

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

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

【问题讨论】:

  • 感谢您的回复。我已经意识到这一点。我的问题是是否存在创建非聚集索引比创建聚集索引更有益的情况
  • 是的,你应该避免聚集索引;该列具有低基数,没有特定顺序,经常更新,非顺序,它是许多列的组合...
  • 感谢您的回答。很有帮助
  • 也许这个问题会对你有所帮助:stackoverflow.com/questions/5070529/…

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


【解决方案1】:

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

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

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

  • (4字节理想)

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

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

  • 理想情况下不断增加,这样您就不会出现可怕的索引碎片(GUID 与良好的集群键完全相反 - 出于这个特殊原因)

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

除了这些点之外,其他任何事情都应该是第二和第三级的重要性......

查看 Kimberly Tripp(索引女王)关于该主题的一些博客文章 - 她在博客中所写的任何内容都绝对是无价之宝 - 阅读、消化 - 以此为生! p>

【讨论】:

  • 感谢 marc_s 的清晰解释。但从技术上讲,non clustered 索引为我们做了什么。它有什么重要性..?
  • @nad:精心挑选的非聚集索引可以加快您的搜索速度——您不必将数百万行数据与您的搜索条件进行比较,您只需找到 4 个给定的行, 5 比较。这会产生巨大的不同!
  • @MuriloKunze:阅读Kim Tripp's blog post on the topic - 她详细解释了为什么会这样
  • 对不起,“SQL Server - 何时使用聚集索引与非聚集索引?”问题的答案在哪里? ?
猜你喜欢
  • 2018-05-08
  • 2012-10-01
  • 2020-08-04
  • 2017-04-01
  • 2011-03-24
  • 2014-04-27
  • 2013-03-22
  • 2014-11-01
相关资源
最近更新 更多