我知道这是一个广泛的问题,但我继承了几个表现不佳的人,需要对他们进行严格的优化.我想知道优化所涉及的最常见步骤是什么.那么,当你面对同样的情况时,你们有些人采取了什么措施?
相关问题:
可以应用哪些通用技术来优化SQL查询?
roman m.. 15
查看查询分析器中的执行计划
查看哪个步骤成本最高
优化步骤!
返回第1步[thx to Vinko ]
tbreffni.. 7
在SQL Server中,您可以查看查询分析器或Management Studio中的查询计划.这将告诉您在每批语句中花费的大部分时间.您需要查找以下内容:
表扫描; 这意味着您完全缺少索引
索引扫描; 您的查询可能没有使用正确的索引
查询中每个步骤之间的箭头粗细告诉您该步骤生成的行数,非常粗的箭头表示您正在处理大量行,并且可以指示某些连接需要进行优化.
其他一些一般提示:
大量条件语句(例如多个if-else语句)可能导致SQL Server不断重建查询计划.您可以使用Profiler进行检查.
确保不同的查询不会相互阻塞,例如阻止select语句的更新语句.通过在SQL Server select语句中指定(nolock)提示可以避免这种情况.
正如其他人所提到的,请尝试使用Management Studio中的性能调优向导.
最后,我强烈建议您创建一组负载测试(使用Visual Studio 2008测试版),您可以使用它来模拟应用程序处理大量请求时的行为.某些SQL性能瓶颈仅在这些情况下表现出来,并且能够重现它们使得修复更容易.
查看查询分析器中的执行计划
查看哪个步骤成本最高
优化步骤!
返回第1步[thx to Vinko ]
在SQL Server中,您可以查看查询分析器或Management Studio中的查询计划.这将告诉您在每批语句中花费的大部分时间.您需要查找以下内容:
表扫描; 这意味着您完全缺少索引
索引扫描; 您的查询可能没有使用正确的索引
查询中每个步骤之间的箭头粗细告诉您该步骤生成的行数,非常粗的箭头表示您正在处理大量行,并且可以指示某些连接需要进行优化.
其他一些一般提示:
大量条件语句(例如多个if-else语句)可能导致SQL Server不断重建查询计划.您可以使用Profiler进行检查.
确保不同的查询不会相互阻塞,例如阻止select语句的更新语句.通过在SQL Server select语句中指定(nolock)提示可以避免这种情况.
正如其他人所提到的,请尝试使用Management Studio中的性能调优向导.
最后,我强烈建议您创建一组负载测试(使用Visual Studio 2008测试版),您可以使用它来模拟应用程序处理大量请求时的行为.某些SQL性能瓶颈仅在这些情况下表现出来,并且能够重现它们使得修复更容易.