【问题标题】:SQL Server Non Clustered Indexes with multiple columns具有多列的 SQL Server 非聚集索引
【发布时间】:2013-12-05 06:41:56
【问题描述】:

我似乎找不到一个直接的答案。我有以下列:

ZipCode
StateAbbreviation
CountyName

我将单独通过ZipCodeStateAbbreviation/CountyName 组合查询表。我定义了一个 PK Id 列,所以这是我的聚集索引。

推荐什么方法来获得更好的性能/效率?考虑到我将如何搜索表,我应该创建什么样的索引?

【问题讨论】:

  • 那张桌子很大吗(你能估计一下行数)吗?我们会在这张表上有很多插入/更新吗?

标签: sql-server non-clustered-index


【解决方案1】:

首先 - 运行您的应用,看看它是否足够快没有任何索引。

第二 - 如果在某些地方速度很慢,请查找此代码生成的 SQL 工作负载 - 你有什么样的查询?尝试在ZipCode(StateAbbreviation, CountyName) 上添加索引,然后再次运行您的应用程序并查看它的执行情况。

如果那个索引解决了你的问题 -> 去享受你的业余时间吧! :-)

如果没有:添加第二个索引,看看是否有帮助。

不要过度使用索引,因为你可以!一次一个,只有在疼的时候。不要只是提前添加索引 - 仅在您遇到性能问题时添加。要查看它是否有帮助,您需要测量、测量并再次测量,并与之前的测量基线进行比较。

非聚集索引的使用出奇地少 - 您的查询需要恰到好处,SQL Server 查询优化器甚至可以考虑使用非聚集索引。如果表“太小”,则首选表扫描。如果您一直使用SELECT * - 您的非聚集索引也可能会被忽略。

【讨论】:

    【解决方案2】:

    如果您确实添加了索引,则应使用与查询相同的顺序在索引中对列进行排序。如果您不这样做,则无法保证会使用该索引。索引 1) 邮政编码;索引 2) 州缩写,CountyName。

    正如@marc_s 所说,索引应该在必要时使用,因为它们在修改/插入/删除行时会产生一些额外的开销。但是,如果它们是直接引用表,那么索引的唯一负面影响就是它使用的磁盘空间。我通常发现它的价值低于没有索引。

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 2018-05-08
      • 2017-04-01
      • 2011-03-24
      • 1970-01-01
      • 2011-11-30
      • 2014-04-27
      相关资源
      最近更新 更多