Oracle中SQL语句执行过程中Oracle内部解析原理如下:
当一用户第一次提交一个SQL表达式时Oracle会将这SQL进行Hard parse这过程有点像程序编译检查语法表名字段名等相关信息(如下图)这过程会花比较长的时间因为它要分析语句的语法与语义然后获得最优化后的执行计划(sql plan)并在内存中分配一定的空间保存该语句与对应的执行计划等信息
当用户第二次请求或多次请求时Oracle会自动找到先前的语句与执行计划而不会进行Hard parse而是直接进行Soft parse(把语句对应的执行计划调出然后执行)从而减少数据库的分析时间
注意的是Oracle中只能完全相同的语句包大小写空格换行都要求一样时才会重复使用以前的分析结果与执行计划
分析过程如下图
对于大量的频繁访问的SQL语句如果不采用Bind 变量的方式哪Oracle会花费大量的Shared latch与CPU在做Hard parse处理所以要尽量提高语句的重用率减少语句的分析时间通过了解Oracle SQL语句的分析过程可以明白Oracle的内部处理逻辑并在设计与实现上避免
在用JDBC或其它持久化数据(如HibernateJDO等)操作时尽量用占位符(?)