优化器的选择一直是做 SQL 调优绕不开的点。Oracle SQL这套优化思路里,first_rows
和all_rows
两个模式,你得看场景来选。前者追求快响应,适合前端页面那种用户点一下就得出结果的;后者偏重整体效率,跑报表、批那种更合适。
像排序
、排序合并连接
、聚合函数
这些操作,都是得把子步骤全跑完才能动父步骤。所以,如果你碰到这些场景,别犹豫,直接上all_rows
。资源消耗会低不少。
有意思的是,实际执行时,操作不一定真是一条线排下来的。3、5、4 步一起跑,并行执行,效率更高。嗯,这就涉及到执行计划怎么看了。有时候你看着那种树状结构,其实根本看不出先后执行顺序,Oracle 还有一种更清晰的执行计划展示方式,后面会详细说。
如果你现在正陷在执行计划里看得云里雾里,建议你先把这篇文章读一遍,再顺着下面这几个链接点进去看看:
- 优化器和执行计划:讲得比较全,适合扫盲
- 优化 Oracle 执行计划脚本运行配置:动手配置那块讲得还不错
- ORACLE 执行计划与 SQL 调优的并行提示优化:并行这块内容比较细
- SQL 执行计划优化指南:指南类的,按着来基本不会错
- SparkSQL 内核剖析执行计划与优化器:延伸读物,适合多了解点其他体系
如果你是做前端开发但老得写 SQL,那建议你多关注下执行计划
的阅读技巧,不然有时候性能掉坑了都不知道坑在哪儿。