硬解析的演示
下面對上面的兩種情形進行演示
在兩個不一樣的session中完成,一個爲sys賬戶的session,一個爲scott帳戶的session,不一樣的session,其SQL命令行以不一樣的賬戶名開頭
如" sys@ASMDB> " 表示使用時sys賬戶的session," scott@ASMDB> "表示scott賬戶的session
sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;
NAME CLASS VALUE
--當前的硬解析值爲569
parse count (hard) 64 569
scott@ASMDB> select * from emp;
sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;
NAME CLASS VALUE
--執行上一個查詢後硬解析值爲570,解析次數增長了一次
parse count (hard) 64 570
scott@ASMDB> select * from Emp;
sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;
NAME CLASS VALUE
--執行上一個查詢後硬解析值爲571
parse count (hard) 64 571
scott@ASMDB> select * from EMP;
sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;
NAME CLASS VALUE
--執行上一個查詢後硬解析值爲572
parse count (hard) 64 572
scott@ASMDB> select * from emp where empno=7369;
sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;
NAME CLASS VALUE
--執行上一個查詢後硬解析值爲573
parse count (hard) 64 573
scott@ASMDB> select * from emp where empno=7788; --此處原來empno=7369,複製錯誤所致,現已更正爲7788@20130905
sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;
NAME CLASS VALUE
--執行上一個查詢後硬解析值爲574
parse count (hard) 64 574
從上面的示例中能夠看出,儘管執行的語句存在細微的差異,但Oracle仍是爲其進行了硬解析,生成了不一樣的執行計劃。即使是一樣的SQL
語句,而兩條語句中空格的多少不同,Oracle一樣會進行硬解析。