首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >学习优化SQL查询和理解执行计划-参考资料?

学习优化SQL查询和理解执行计划-参考资料?
EN

Database Administration用户
提问于 2012-07-09 00:36:06
回答 2查看 12.1K关注 0票数 8

我发现自己正在编写越来越多的SQL查询(大部分是Oracle 11g,但有些是Server 2005-2008年),并且已经开始为分析团队的其他成员创建一些相当复杂的视图。

他们大多都跑得很好,但有些人不太好。所以..。

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

还有..。

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

我们这里有一些很好的DBA,但是它们太满了,无法帮助我们优化我们编写的每一个查询。

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

(谢谢你的建议:)

EN

回答 2

Database Administration用户

回答已采纳

发布于 2012-07-09 16:32:06

我想说的是,学习如何理解解释计划是帮助您优化SQL语句的一项重要技能。我发现Christian Antognini的书“甲骨文性能的故障排除”在详细介绍这些方法以及如何处理数据库优化方面非常有用。当你几岁的时候,你仍然会从中学到很多相关的东西。

如果你更先进,你可以看看乔纳森刘易斯的书,但这些都是更深入的,所以可能不是一个好的起点。基于成本的甲骨文基础现在已经很老了,但是它的大部分仍然是相关的。我还没有读过Oracle :故障排除的基本内部部件,但它得到了甲骨文社区的好评。

当您使用11g时,如果您的查询时间超过几秒钟,我肯定会建议您查看实时SQL监视器(假设您获得了适当的许可)。顾名思义,它实时显示了SQL语句的进度,分析了每个操作所用的时间,以及到目前为止获取的行的详细信息。它还会将最近执行的查询的详细信息保存一段时间,以便查看更改对语句的影响。

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

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

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

主要是通过编写查询、查看(预期的)解释计划并将其与实际的执行计划进行比较(通过跟踪查询或使用SQL监视器)来学习。然后重写查询、添加/删除索引等,并查看其对计划和执行时间的影响。

票数 7
EN

Database Administration用户

发布于 2012-07-09 04:16:11

在您寻找Oracle特定信息时,我建议您在甲骨文上使用问汤姆博客。一般来说,我认为你会发现建议是不要调优查询。您将得到关于如何编写优化器可以优化的查询的好建议。Oracle也是在线,我通常在那里查找关于Oracle的最新信息。我没有和SQLServer合作过,所以我对它没有任何建议。

在过去的几年里,我在优化查询领域没有看到很多新的东西。最大的改变是反对基于规则的优化器,我几乎不记得曾经使用过它。但是,我知道SQLServer仍然使用基于规则的优化器,所以理解它的规则会有帮助。

您可以在其中编辑查询、执行查询并生成解释计划的工具有助于理解哪些更改会使您获得性能良好的查询。我在AquaData Studio中取得了很好的效果,并且非常喜欢它的树状视图。SQL开发人员也应该这样做。

与任何优化一样,您需要有关于它的性能的数量数据。然后你可以确定你是否真的优化了它。

如何优化查询在一定程度上取决于解析器如何构建和优化查询。在很大程度上,它取决于您正在查询的数据的分布。在Oracle数据库中,如果结果集占表的4%或更多且是随机分布的,则表扫描通常比索引快。

我一直在为一组开发人员优化查询。一年只有两三次查询需要进行认真的优化。大多数查询都很简单,不需要优化。其余的通常可以通过添加缺失的连接路径来处理。

对于Oracle,有三个可调的设置可以显著影响性能。索引和数据查找的成本计算会相互影响,从而改变使用索引或不使用索引的条件。这两种方法可以在每个会话的基础上进行调整。缺省值通常不是最优的。另一个值控制优化器将尝试的替代方案。增加这一价值通常会有所帮助。

数据分布和数据量对优化有显著的影响。在优化它时,最好使用生产数据库的副本,或者至少使用具有相同数据分布和卷的数据库。我严重破坏了测试环境,优化了生产订单数据库的查询。测试和开发数据库的数据分布有很大的不同,这导致查询失败,即使有大量的数据。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/20555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档