Edu*_*ard 4 sql oracle optimization plsql
假设我的查询效果不佳.你通常如何进行sql优化?我应该在查询执行计划中看到的第一件事是什么?有关于此的好文章或书吗?
为了利用执行计划(这是数据库将如何实现您的请求的描述),必须了解它可用的选项(数据库)并判断优化程序是否做出选择是正确的.这需要大量的知识和经验.
对于我正在做的工作(ETL处理),性能"问题"通常分为两类:
对于(1),我必须决定是否可以不同地重构数据,因此我扫描较少的数据.索引很少使用,因为我对足够大的子集感兴趣,使索引访问比全表扫描慢.例如,我可能存储数据的水平子集(最近30天)或数据的垂直子集(10列而不是80),或者数据的聚合.无论哪种方式都会减小数据的大小,从而提高处理速度.当然,如果数据只使用一次,我就把问题转移到其他地方.
对于(2),我通常首先检查xplan顶行的"基数"(num rows).如果我知道我的查询返回5,000,000行,但它表示500,我可以非常肯定优化器在某处搞砸了.如果总基数位于正确的球场,我会从另一端开始,并检查计划的每一步,直到找到第一个大的估计错误.如果基数错误,则该表与下一个表之间的连接方法可能是错误的,并且此错误将在计划的其余部分中级联.
谷歌"通过基数反馈进行调整",你会找到一篇由沃尔夫冈·布莱特林撰写的论文,他以(以更好的方式)描述了这种方法.这是一个非常好的阅读!
此外,一定要在Jonathan Lewis博客上闲逛.如果有一些他不知道的Oracle优化器,那就不值得了解了.他也写过关于这个主题的最好的书.查看基于成本的Oracle基础知识.如果我能及时将一本书送回给自己,那就是它.
Tom Kyte的专家Oracle数据库架构("问汤姆"背后的人)也是一本很棒的读物.我第一次看到这本书是令人失望的,因为我一直在寻找"调整技巧"而没有找到.在我的第二次阅读中,我意识到通过了解数据库的工作原理,您可以通过"从性能设计"开始而不是在最后"添加"性能来消除整个类别的性能问题:)
Dan Tow的SQL调优是关于如何确定最佳执行计划的基本原理的另一个令人敬畏的读物.该知识可用作对执行计划进行故障排除的方法(或强制优化器按您的方式执行).
如果你做到这一点,现在是摆弄提示的好时机.不是之前.
| 归档时间: |
|
| 查看次数: |
2040 次 |
| 最近记录: |