性能调优SQL - 如何?

时间:2009-01-21 00:08:52

标签: sql performance

一个性能如何调优SQL查询?

  • 可以使用哪些技巧/工具/概念来改变SQL查询的性能?
  • 如何量化收益?
  • 需要注意什么?


可以使用哪些技巧/工具/概念来更改SQL查询的性能?

  • 使用索引?他们如何在实践中工作?
  • 归一化与非归一化数据?什么是性能与设计/维护权衡?
  • 预处理中间表?是用触发器还是批量作业创建的?
  • 重构查询以使用临时表,子查询等?
  • 将复杂查询分成多个,将UNION分成结果?
  • 还有别的吗?


如何量化绩效?

  • 读操作?
  • CPU时间?
  • “不同版本一起运行时的”查询成本百分比“?
  • 还有别的吗?


需要注意什么?

  • 生成执行计划的时间? (存储过程与内联查询)
  • 存储过程被迫重新编译
  • 对小数据集进行测试(查询是线性扩展还是平方律等?)
  • 以前的缓存运行结果
  • 优化“正常情况”,但伤害“最坏情况”
  • 什么是“参数嗅探”?
  • 还有别的吗?


主持人注意: 这是一个很大的问题,我应该把它分成多个问题吗?

注意响应者: 因为这是一个很大的问题,请参考其他问题/答案/文章,而不是写冗长的解释。

4 个答案:

答案 0 :(得分:8)

我非常喜欢“Professional SQL Server 2005 Performance Tuning”一书来回答这个问题。这是Wiley / Wrox,不,我不是作家,呵呵。但它解释了你在这里要求的很多东西,以及硬件问题。

但是,是的,这个问题已经超出了可以在像这样的评论框中回答的范围。

答案 1 :(得分:4)

编写可搜索的查询是需要的事情之一,如果您不编写可搜索的查询,则优化程序无法利用索引。以下是此查询从24小时到36秒的Only In A Database Can You Get 1000% + Improvement By Changing A Few Lines Of Code示例

答案 2 :(得分:1)

当然你还需要知道这3个连接之间的区别

循环连接, 散列连接, 合并加入

见这里:http://msdn.microsoft.com/en-us/library/ms173815.aspx

答案 3 :(得分:0)

以下是我们可以遵循的一些基本步骤,以提高效果:

  1. 检查所涉及的表的pk和fk中的索引是否仍然需要时间索引查询中的列。
  2. 每次操作后都会修改所有索引,因此请不要为每一列编制索引
  3. 在批量插入之前删除索引,然后重新创建索引。
  4. 谨慎选择
  5. 使用if exists而不是count
  6. 在指责dba之前先检查网络连接