1

我有一个名为 ResultValues 的表,其中有 6 列,4 列是整数,1 是数据时间,1 是 varbinary (1640)。

记录总数为“27,389,918”,因此该表非常庞大。现在当我运行这个查询

select LineNo ,TraceNo, DateTime ,Bin from ResultValues
where ID = 8115
Order by DateTime ASC

我在 UniqueID、ID、LineNo、TraceNo 上创建了非聚集索引,它给了我 987014。

问:我在非聚集索引之前所用的时间仍然相同。有人可以告诉我如何减少使用此查询的时间。请建议。

4

2 回答 2

2

创建索引id, other columns不是一个好主意。

仅在. _ id您应该会发现查询时间要好得多。

原因有两个:

  • id 是唯一的,因此向索引添加更多列不会创建更多索引条目,因此不会创建任何性能或效率
  • 索引条目会小很多,因此可以更快地扫描索引,从而加快查询时间

这种索引“有用”的唯一时间是用于仅索引查询,其中所有数据都可以从索引中检索,而无需转到表。但是,这是一种非常具体/利基的性能技术,恕我直言,价值不大。我曾与许多生产系统合作过,包括非常大的基于 Web 的公司,但从未见过这样定义的索引。它们对数据库的维护非常昂贵,而且通常弊大于利,而且好处很小。

于 2013-06-10T09:35:25.160 回答
2
CREATE NONCLUSTERED INDEX ix_id_DateTime__LineNo_TraceNo_Bin 
ON (ID, DateTime)  INCLUDE (LineNo ,TraceNo, Bin)

这应该是特定查询的覆盖索引 - 它应该会给你最好的结果。

于 2013-06-10T09:48:57.927 回答