oracle 数据库优化
oracle数据库执行计划
学习执行计划之前,先了解一下oracle 的优化器。在oracle9i及之前的版本中,大部分优化系统使用的基于规则的优化器(RBO)。从oracle9.1开始官方名义上就不再支持RBO,而是使用基于成本的优化器(CBO)。
执行计划
执行计划可以显示出sql语句的执行方式和执行顺序,如何查看sql语句的执行计划:
- 通过plsql选中要查看执行计划的sql语句,按F5可以直接跳转到执行计划界面。
1)descriotion是sql执行的顺序 越靠右的越先执行同级别上面的先执行
-
通过plsql,
1) explain for [sql语句]
2)select * from table(dbms_xplan.display);
3) 查看sql执行计划
operation:sql执行的顺序 越靠右的越先执行同级别上面的先执行3.通过sqlplus,使用sqlplus连接数据库之后
1) explain for [sql语句]
2)select * from table(dbms_xplan.display);
3) 查看sql执行计划
Operation:sql执行的顺序 越靠右的越先执行同级别上面的先执行
Rows :执行sql之后预计返回多少行
Cost:
4.Autotrace
- set autotrace on;
2)想查看的sql
3)查看执行计划和autotrace收集的信息
autotrace 主要包含以下信息:
- recursive calls:递归调用次数
- db block gets:当前读的块数
- consisent:一直性读的块数和当前读的块数加起来为逻辑读的次数
- physical read:执行sql的过程中,从硬盘上读取的数据块个数
- redo size:执行sql的过程中,产生的redo日志大小
- bytes set via sqlnet to client:通过sqlnet发送给客户端的字节数
- bytes received via sqlnet from client:通过sqlnet接收客户端的字节数
- sorts(memory):在内存中发生排序
- sorts(disk):不能在内存中发生的排序,需要硬盘来协助
- rows processed:结果的记录数
总结
对于执行计划而言,其中重要的是Operation、Name、Rows、Bytes这四列,其他并没有太大的实际意义,尤其是cost和time特别容易误导新手。