具有多个字段或多个索引的索引

时间:2017-01-23 23:10:33

标签: indexing sql-server-2012

我已经做了一些环顾四周试图了解索引。能够从Brent Ozar的网站上学到很多东西,但有一个跟进问题。

在布伦特关于sargabliity的视频中,他提到如果列在where子句中,那么它需要是索引中的第一列。我的问题是,如果where子句有多个来自同一个表的列应该是一个索引,其中列是按where子句的顺序列出的,还是每列都有它自己的索引?

这些表每天更新1次,包含大约1000万条记录。

我正在使用SQL Server 2012。

1 个答案:

答案 0 :(得分:1)

根据您的查询,这两种不同的索引会有很大不同。

如果WHERE子句中有两个字段,

  

如果您有一个复合索引(一个索引中有2个字段),则为SQL Server   将使用以下计划,它非常快。

Composite Index Plan

  

如果每个字段上有2个单独的索引,则SQL Server使用a   不同的计划(比上面慢很多)

Separate Index Plan

如您所见,它会在不同的线程中找到每个数据集,然后合并它们。

您可能会根据您的数据获得不同的计划,但这是SQL Server的一般行为。