sql与执行计划

一、sql语句执行的步骤
1、语法分析
2、语义分析(检查数据库对象是否存在,用户是否有权限)
3、视图转换(将涉及到视图的操作语句转换成对基表的查询语句)
4、表达式转换(将复杂的sql表达式转换成简单的等效连接表达式)
5、选择优化器(优化器不同,执行计划也不同)
6、选择连接方式(oracle 有三种连接方式)
7、选择连接顺序 (多表连接的时候,选择哪一个表先连)
8、选择数据的搜索路径 (全表搜索、索引或者其他方式)
9、运行执行计划
二、优化器与执行计划
执行sql之前要分析语句的执行计划,执行计划由optimizer(优化器)来执行。
优化器的两种方式:基于规则的优化方式(RBO)和基于代价的优化方式(CBO)
RBO:遵循ORACLE内部定的一些规则。
CBO:看语句的代价,这里的代价主要指CPU和内存。优化器主要参照统计信息来判断是否使用这种方式。
Rule:基于规则的方式。
Choose:oracle默认的方式。表或索引有统计信息,走CBO方式。没有统计信息,走RBO方式。
First Rows:和Choose方式类似。区别:当有统计信息的时候,以最快的方式返回最先几行。
All Rows:oracle默认的模式,选择一种在最短的时间内返回所有数据的执行计划,基于整体成本的考虑。
First_row_n:根据成本而不是硬编码来选择执行计划,n是想获得的结果集的前n条记录。分页需求中会用到。
三、分析工具
1、explain plan
2、Autotrace
3、Tkprof
实践:explain plan set statement_id='T_TEST' for select * from scott.emp
SELECT A.OPERATION,OPTIONS,OBJECT_NAME,OBJECT_TYPE,ID,PARENT_ID
FROM PLAN_TABLE  a
WHERE STATEMENT_ID='T_TEST'
ORDER BY Id;

猜你喜欢

转载自njnu-zhoubo.iteye.com/blog/1721811