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

时间:2012-11-30 02:22:33

标签: sql sql-server performance sql-server-2008 indexing

我有一个包含列的表

ParameterValueId, SiteId, LocationId, ParameterId, SampleDateTime

以及其他一些专栏。

ParameterValueId是主键。

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

  • 我的所有查询都将使用SiteId
  • 我的查询中有75%将使用SiteIdLocationId
  • 我的查询中有50%将使用SiteIdLocationIdParameterId
  • 我的查询中有25%将使用SiteIdLocationIdParamterId和过滤器>=/<= SampleDateTime

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

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

我想我的问题是,如果我在4列上创建一个索引,如果我只使用这些列中的1,2或3而不是全部4列,那么仍会提高性能吗?

1 个答案:

答案 0 :(得分:6)

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

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