gpt4 book ai didi

Sql查询优化和分析

转载 作者:行者123 更新时间:2023-12-03 16:09:37 26 4
gpt4 key购买 nike

假设我的查询性能不佳。你通常如何进行sql优化?在查询执行计划中我应该首先考虑什么?有没有关于这方面的好文章或书籍?

最佳答案

为了使用执行计划(这是对数据库如何实现您的请求的描述),必须了解它(数据库)可以使用哪些选项,并判断优化器所做的选择是否是正确的。这需要大量的知识和经验。

对于我正在做的工作(ETL 处理),性能“问题”通常属于以下两类之一:

  • 查询需要很长时间,因为读取大量数据需要大量时间:)
  • 优化器出错并选择了错误的执行计划

  • 对于(1),我必须决定是否可以以不同的方式重组数据,以便扫描更少的数据。索引很少使用,因为我对足够大的子集感兴趣,以使索引访问比全表扫描慢。例如,我可能存储数据的水平子集(过去 30 天)或数据的垂直子集(10 列而不是 80 列),或数据的聚合。无论哪种方式,都会减少数据的大小以提高处理速度。当然,如果数据只使用一次,我只是将问题移到别处。

    对于 (2),我通常首先检查 xplan 顶行的“基数”(行数)。如果我知道我的查询返回 5,000,000 行,但它显示 500,我可以很确定优化器在某个地方搞砸了。如果总基数在正确的范围内,我会从另一端开始检查计划的每一步,直到找到第一个大的估计错误。如果基数错误,则该表和下一个表之间的连接方法可能是错误的,并且此错误将级联计划的其余部分。

    谷歌搜索“通过基数反馈调整”,你会发现 Wolfgang Breitling 写的一篇论文(以更好的方式)描述了上述方法。这真是一本好书!

    另外,一定要常来 Jonathan Lewis Blog .如果他不知道有关 Oracle 优化器的某些内容,则不值得知道。他还写了关于这个主题的最好的书。退房 Cost-Based Oracle fundamentals .如果我能把一本书及时寄回给自己,就是这本书。

    Expert Oracle Database Architecture汤姆·凯特(Tom Kyte)(“问汤姆”背后的人)也是一本很棒的读物。我第一次读这本书很失望,因为我一直在寻找“调整技巧”,但一无所获。在我第二次阅读时,我意识到通过了解数据库的工作原理,您可以通过从一开始就“为性能而设计”而不是在最后“添加”性能来消除整类性能问题:)

    SQL Tuning Dan Tow 撰写的另一本很棒的读物,介绍了如何确定最佳执行计划的基本原理。该知识可用作对执行计划进行故障排除的一种方式(或强制优化器按照您的方式执行)。

    如果你做到了这一步,现在是摆弄提示的好时机。以前不是。

    关于Sql查询优化和分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935706/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com