在学习数据库编程时,咱们都知道在执行SQL命令时,有二种选择:mysql
可使用PreparedStatement对象,算法
也可使用Statement对象。sql
而熟悉JDBC编程的大侠们都会选择使用PreparedStatement对象,主要由于使用预编译对象PreparedStatement时,有如下几个优势:数据库
首先是效率性编程
PreparedStatement 能够尽量的提升访问数据库的性能,咱们都知道数据库在处理SQL语句时都有一个预编译的过程,而预编译对象就是把一些格式固定的SQL编译后,存放在内存池中即数据库缓冲池,当咱们再次执行相同的SQL语句时就不须要预编译的过程了,只需DBMS运行SQL语句。因此当你须要执行Statement对象屡次的时候,PreparedStatement对象将会大大下降运行时间,特别是的大型的数据库中,它能够有效的也加快了访问数据库的速度。缓存
其次,使用PreparedStatement对象能够大大提升代码的可读性和可维护性。oracle
MySQL支持预编译,只是默认没开启。性能
Oracle里面除了查询结果集缓存外,还有SQL缓存。学习
语句缓存的好处
• ORACLE执行SQL语句时,先将SQL语句的字串经过一个哈希算法得出一个哈希值,而后检查共享池中是否已存在这个哈希值,如有就用已缓存的执行计划来执行这个语句(CACHE HIT 缓存命中),若没有(CACHE MISS 缓存缺失)则需进行解析,解析须要完成下面的工做:优化
Ø 语法检查;
Ø 语义检查,看参考对象是否存在,类型是否正确;
Ø (若是是CBO优化模式)收集参考对象的统计;
Ø 检查用户的权限是否足够;
Ø 从许多可能的执行路径中选择一条做为执行计划;
Ø 生成语句的编译版本(P-CODE)。
• 解析是一个昂贵的操做,由于过程当中须要消耗许多资源; • 最大化CACHE HIT是调整共享池的目标