学习优化 SQL 查询和理解执行计划 - 资源?

Tom*_*ell 8 performance oracle-11g-r2 tuning query-performance

我发现自己在工作中编写了越来越多的 SQL 查询(主要是 Oracle 11g,但也有一些是 SQL Server 2005-2008),并且已经开始为分析师团队的其他成员创建一些非常复杂的视图。

他们大多都运行得很好,但其中一些不太好。所以...

  • 我如何学习调整我的查询?
  • 我需要学习阅读/执行执行计划吗?

和...

  • 您可以推荐哪些书籍/网站来了解 SQL 查询调优 1) 一般 2) 专门针对 Oracle 11g?

我们这里有一些优秀的 DBA,但他们太忙了,无法帮助我们调整我们编写的每个查询。

我在 Amazon 上为 Oracle 找到的大多数书籍似乎都面向整体数据库优化和/或写于 8-10 年前。

非常感谢您的建议:)

Chr*_*xon 7

我想说的是,学习如何理解解释计划是帮助您优化 SQL 语句的一项重要技能。我发现 Christian Antognini 的书《Oracle Performance 故障排除》在详细说明这些工作原理以及解释如何进行数据库优化方面非常有用。虽然几岁了,你仍然会从中学到很多仍然相关的东西。

如果你更高级,你可以看看乔纳森刘易斯的书,但这些书更深入,所以可能不是一个好的起点。基于成本的 Oracle Fundamentals现在已经很老了,但其中大部分仍然相关。我还没有阅读Oracle 核心:故障排除的基本内部原理,但它在 Oracle 社区中得到了很好的评价。

当您使用 11g 时,如果您的查询时间超过几秒钟,我绝对建议您查看实时 SQL 监视器(假设您已获得适当许可)。顾名思义,它实时显示 SQL 语句的进度,分解每个操作所花费的时间以及迄今为止获取的行的详细信息。它还在短时间内保留最近执行的查询的详细信息,以便了解您的更改如何影响语句。

Oracle SQL 监控文档:http : //docs.oracle.com/cd/E11882_01/server.112/e16638/instance_tune.htm#PFGRF94543

学习如何调整查询需要时间和练习。我学到了一些东西:

  • 编写查询以尽快获取尽可能少的行(例如,如果您只需要 100 行,则您不想完全扫描 1000 万行表)
  • 验证解释(预期)计划的每个步骤中预期的行数是否与实际执行计划中返回的行数相匹配。当这些数量级不同时,优化器可能没有选择“最佳”计划。
  • 了解良好索引的原则:它们如何工作以及在执行查询时何时应该/不应该使用它们(Richard Foote有一篇非常深入的博客讨论了 Oracle 中的索引)

大多数情况下,您将通过编写查询、查看(预期的)解释计划并将这些计划与实际执行计划进行比较(通过跟踪查询或使用 SQL 监视器)来学习。然后重新编写查询,添加/删除索引等,看看它如何影响计划和执行时间