SQL Server 2008索引多列有些未曾一直使用

Dan*_*n P 1 sql sql-server indexing performance sql-server-2008

我有一个带有列的表

ParameterValueId, SiteId, LocationId, ParameterId, SampleDateTime
Run Code Online (Sandbox Code Playgroud)

和其他一些专栏.

ParameterValueId 是主键.

我想创建一个不是唯一的索引来加速查询SiteId, LocationId, ParameterId, SampleDateTime.

  • 我的所有查询都将使用 SiteId
  • 75%的查询将使用SiteIdLocationId
  • 我查询的50%会使用SiteId,LocationIdParameterId
  • 我查询的25%会使用SiteId,LocationId,ParamterId,和过滤器>=/<= SampleDateTime

我可以创建一个索引SiteId, LocationId, ParameterId, SampleDateTime吗?

或者我需要创建4个索引?

我想我的问题是,如果我在4列上创建一个索引它是否会被使用,如果我只使用这些列中的1,2或3而不是所有4列,仍然会提高性能?

Stu*_*rth 6

作为一般的经验法则,根据您所描述的场景,所有四列上的一个索引可能是一个很好的起点.但是,根据数据的性质和形状,您可能还需要做其他事情来提高性能(例如,SiteID的不同之处是什么?它是唯一的吗?单个值是否超过20%的值? colum?).

简答:即使并非在查询中使用了所有覆盖的列,也将使用一个覆盖索引.