sql优化应该是基于对数据库优化器和执行计划的深入理解,明白sql语句从解析到执行中间的过程,以及优化器是如何选择某一执行路径作为最终的执行计划。
1. 什么是优化器
优化器是数据库中的一个核心子系统,优化器的目的就是按照一定的规则根据目标sql得到最佳的执行计划。oracle 10g以后默认的优化器是CBO,CBO是基于成本的优化器,mysql的优化器也是基于成本的优化器,成本值,即sql语句需要的io流,cup使用率,网络传输啊,以及相关的统计信息,更加这些统计信息选择成本最低的执行路径作为执行计划。如下图是oracle的sql执行流程。图片来自(基于Oracle的sql优化)
2.执行计划
为了执行sql语句,oracle会进行很多步骤,oracle用来执行目标sql语句的步骤的聚合就是执行计划。
如果使用plsql我们可以很轻松的执行计划,打开plsql按下F5,我们可以看到执行目标sql内部具体的步骤,操作名,谓词信息,列信息,cbo评估出来的结果(即受影响的行),cpu消耗,运行时间等。
其实plsql也是封装了底层的explain plan 命令。
打开我们的sqlplus
输入e