0

我正在使用 SQL Server 2008 编写一个繁重的 SQL 查询。当查询处理 100 行时,它立即完成。当查询处理 5000 行时,大约需要 1.1 分钟。

我使用实际执行计划来检查它在处理 5000 行时的性能。该查询包含 18 个子查询,在计划中显示的查询成本百分比没有显着提高,例如大约 0%、2%、5%、7%。最高的是 11%。下面的屏幕截图显示了查询中的最高进程。(例如 11% 的 94%)

下面的屏幕截图显示了查询中的最高进程。 (例如 11% 的 94%)

我还使用了客户端统计工具,试用 10 显示它处理 5000 行时,试用 9 显示它处理 100 行时。

在此处输入图像描述

谁能告诉我在哪里(或哪个 SQL Server 工具)我可以找到表明查询执行 5000 行时过程缓慢的数据/详细信息?

添加:添加索引、键。实际的 exe 计划在每个子查询上都没有显示注释和高百分比。

我刚刚发现“活动监视器”在“最近的扩展查询”中显示一个子查询的“平均持续时间”为 40000 毫秒,而实际计划显示此查询仅占总流程成本的 5%。

谢谢

4

2 回答 2

0

虽然我确实相信学习执行计划的基础以及 SQL Server 查询优化器的运行方式是成为优秀数据库开发人员的基本要求,但与大多数工具相比,人类在诊断和处理 SQL 方面仍然做得更好本机或第三方,实际上 SQL Server Management Studio 提供了一个工具,它可以(有时)“自动”为您修复性能:

数据库引擎优化顾问

您可以通过 Query -> Analyze Query Using Database Engine Tuning Advisor 下的功能区菜单访问,或者(更有帮助)通过选择您的查询,右键单击选择,然后选择使用 Database Engine Tuning Advisor 分析查询,这给出了添加的自动过滤到仅查询正在使用的数据库对象的好处。

调优顾问实际上所做的只是调查是否有任何索引或统计信息可以添加到您的对象中。然后它会“推荐”它们,如果您愿意,您可以不应用、应用部分或全部应用。

购买者警告!它的所有建议都是为了让特定查询运行得更快,所以它绝对不会帮助你做出关于添加索引的正确决定,该索引可能只被一两个查询使用但必须不断更新当您将数据添加到数据库时。这是一种被称为“index shotgunning”的 SQL 反模式,通常被 DBA 所反对,他们宁愿看到重写查询以利用更有用的索引。

于 2013-02-24T15:23:19.937 回答
0

为了查看性能,使用数据库调优顾问和/或缺少的索引 DMV,然后在 Management Studio 中或使用 sql sentry plan explorer 之类的工具检查执行计划应该足以告诉您需要在哪里进行修改。

了解执行计划以及物理运算符与逻辑操作的关系是性能调优的最大关键,也是对索引和统计数据的良好理解。

我认为没有任何工具可以自动为您修复性能。

于 2013-02-24T15:02:33.183 回答