2010-10-21 47 views
3

我使用了内置的性能调整工具并为我的数据库构建了索引。从那以后,我将一些查询从“select top 10 ...”改为“select top 50”。我是否需要重建我的SQL服务器数据库索引?

我的问题是,我需要重建我的SQL Server数据库索引?

+0

和什么没有“顶”的命令? – Rana 2010-10-21 23:58:03

回答

3

你并不需要重建索引,如果你已经改变了这一切是前50名排名前10位的查询是关于执行计划完全相等(从而将现有的索引中受益),唯一的区别就是你正在从结果集中检索一些额外的行。

如果您注意到这种变化后,会有很大的性能下降,这个问题必须在其他地方。例如,我已经看到,在按照与索引的自然顺序不同的顺序添加数据之后,出于性能原因重新构建聚集索引。但这是因为新数据,并不是因为排名前10位变为前50位。

编辑:Sam Saffron评论说,执行计划可以在前10名和前50名查询之间进行更改,以确保不会发生这种情况你检查两个执行计划,看看它们是否有所不同。

+0

如果没有“top”命令呢? – Rana 2010-10-22 00:01:32

+0

如果你有很多行,当然会花费更多的时间来获取它们,但是查询时间应该是相等的,毕竟你所要改变的只是数据量,而不是如何选择该数据。 – 2010-10-22 00:13:00

+0

我已经看到在某些情况下,当您从前10名切换到前50名时,查询计划会发生根本性变化。 – 2010-10-22 00:29:15

0

虽然你并不需要重建索引,只是因为查询方式有变化,你可能不得不重新考虑索引。

例如,假设你有一个特定列的非聚集索引的表。无论何时您需要使用不在非聚集索引中的数据提取行时,SQL都必须转到基础表以提取数据。

当您拉动1行时,通常会非常便宜地转到非聚集索引,然后点击主表,但是在某些时候,如果您拉动很多行,则可能会变得更便宜,而只是扫描整个表。

底线如果查询模式的改变可能要检查你的索引,有可能是,对于top 10查询伟大的工作指标,将不再挑选了top 50查询。

相关问题