如何减少查询时间

时间:2013-06-10 09:30:43

标签: sql sql-server-2008 optimization query-optimization

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

记录总数为'27,389,918'所以此表非常庞大。现在,当我运行此查询

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

我在UniqueID,ID,LineNo,TraceNo上创建了NON Clustered Index,它给了我987014。

问题:在非聚集指数之前我仍然需要花费相同的时间。谁能告诉我如何减少使用此查询的时间。请建议。

2 个答案:

答案 0 :(得分:2)

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

id上创建一个 索引。你会发现你的查询时间要好得多。

原因有两方面:

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

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

答案 1 :(得分:2)

CREATE NONCLUSTERED INDEX ix_id_DateTime__LineNo_TraceNo_Bin 
ON (ID, DateTime)  INCLUDE (LineNo ,TraceNo, Bin)

这应该是特定查询的覆盖索引 - 它应该为您提供最佳结果。