(1)sql解析
解析分为软解析与硬解析。
SQL语句有dml和ddl之分,ddl执行硬解析,dml若在share pool中存在且可被共享,执行软解析。
软解析无需选择与生成执行计划,减小开销,实际应该尽量避免使用绑定变量硬解析。
(2)解析步骤
1.语法判断
判断sql语句是否拼写错误
2.语义判断
判断对象是否存在,用户对对象是否有权限
3.查找share pool 确定硬解析或软解析
- 判断是否同一sql语句,大小写及空格等都要完全相同
- 判断是否同一物理对象,如不同用户下的同名表
- 判断是否同一优化器,如first rows 与 all rows不同
符合上面三个条件,进行软解析
注:网上有个误区,先进行share pool 查找,若是软解析则不进行1、2步骤,据官方文档,这是不正确的。详见http://docs.oracle.com/cd/E11882_01/server.112/e40540/sqllangu.htm#CNCPT88919
(3)软解析:
条件:在share pool中存在,且可被共享
步骤:1.执行执行计划
(3)硬解析
条件:在share pool 中不存在或存在但不可被共享
步骤:1.选择执行计划
2.产生执行计划
3.执行执行计划