我有一个名为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。
问题:在非聚集指数之前我仍然需要花费相同的时间。谁能告诉我如何减少使用此查询的时间。请建议。
答案 0 :(得分:2)
在id, other columns
上创建索引不是一个好主意。
在id
上创建一个 索引。你会发现你的查询时间要好得多。
原因有两方面:
这种索引“有用”的唯一时间是仅索引查询,其中可以从索引中检索所有数据,而无需转到表。然而,这是一个非常具体/小众的性能技术,恕我直言没有什么价值。我曾与许多生产系统合作过,包括非常大的基于Web的公司,并且从未见过定义过这样的索引。它们对于维护数据库来说非常昂贵,并且通常造成的危害远大于好处,而且好处很小。
答案 1 :(得分:2)
CREATE NONCLUSTERED INDEX ix_id_DateTime__LineNo_TraceNo_Bin
ON (ID, DateTime) INCLUDE (LineNo ,TraceNo, Bin)
这应该是特定查询的覆盖索引 - 它应该为您提供最佳结果。