我有一个包含103列和1000万个条目的表。
如果我在非索引列上选择带有WHERE子句的数据,则会花费大量时间。
以下是花费1分30秒的查询示例:
Select top 1 table_id from myTable where date is not null
它返回行号9999995的id。
我试图在这个非唯一列上放置一个非聚集索引,但我没有看到任何改进
我想知道处理时间是否正常。如果没有,是否由于数据表中定义的列数很多(即使列主要是int,decimal和nvarchar(50)和datetime列)。
我想知道是否有任何可以改善执行时间的建议?
最好的问候。
答案 0 :(得分:0)
为了得出比这个特定问题更广泛使用的答案,我建议使用Database Engine Tuning Advisor。
基本上,您可以使用现有查询并将其提供给此工具,它会暂时咀嚼它并吐出索引和统计信息的建议以及估计的性能改进。
在这种情况下,您可以只提供一个查询并获得结果(这可能只是[date]
字段上的索引,作为OP所述的评论之一)。但是这个工具可以做得更多。您可以将它与SQL Server Profiler结合使用,捕获所有到达服务器的查询的跟踪,并使用可选的过滤(即执行时间超过1秒),并将整个跟踪提供给Tuning Advisor。这种方法的结果在生产环境中通常是如此令人印象深刻,它们对最终用户来说似乎是不可思议的。
以下是一些方便的入门链接......