我可以使用计划指南来优化执行速度慢的查询吗?

时间:2015-11-20 15:24:00

标签: sql-server sql-server-2008 query-performance sql-execution-plan

同步程序正在我们的SQL服务器和在线数据库之间同步数据。程序每隔5分钟在所有表格上运行查询,其格式为:

select max(ID) from table

之后,程序从在线数据库中检索信息,使用max(ID)仅检索更新的记录。 查询在小表上运行得很快,但有些表有数百万条记录。

使用Where语句可以提升性能:

select max(ID) from table where date >= dateadd(dd,-30,getdate())

不幸的是,这是一个旧程序,不能再改变了。 (没有供应商,也没有源代码)

我读了一些关于计划指南的内容,这可以提高查询效果。

我可以使用计划指南来更改这些查询,以便它们运行得更快吗?

1 个答案:

答案 0 :(得分:1)

我会尽量避开计划指南,除非你已经尝试了其他一切来帮助SQL Server选择更好的执行计划;原因是,您强制SQL Server选择可能不是最佳执行计划,如果您的统计数据是正确的,SQL Server会为您提供一个非常好的估算计划。

很抱歉,如果这是长途跋涉,但SQL Server性能基于统计信息,如果您的统计信息已关闭,则查询将无法以最佳状态执行。这是我首先要开始的地方。

我首先运行您的查询并生成估计的执行计划和实际执行计划。如果您从未使用过执行计划,那么这里有一些网站可以让您了解运营商以及如何解释一些更常见的运营商; Rasanu Consulting (Joins)Microsoft (Joins)Simple Talk (Common Operatiors)Microsoft (All Operators)。执行计划是根据SQL Server存储在索引和非索引列上的统计信息生成的。我假设您的查询存储在存储初始执行计划的过程中。遗憾的是,对存储过程中查询的更改可能会导致性能问题,因为计划过时,需要重新编译proc。

根据执行计划的结果,您可能会发现一个简单的聚簇索引将有助于提高性能,或者发现微调您的where子句将导致更好的肉体估计。以下是一些能够很好地解释统计数据的网站; Patrick KeislerItzik Ben-GanMicrosoft

您可能想知道“这与我的问题有什么关系?”这将是一个简单的是或否答案,但有效地纠正查询性能始于理解统计和执行计划。

希望这有帮助!