06提高数据处理的效率.pptVIP

  • 4
  • 0
  • 约1.78千字
  • 约 7页
  • 2017-02-12 发布于重庆
  • 举报
06提高数据处理的效率

提高数据处理的效率(1) 主要内容 提高数据处理效率技术概述 数据库处理SQL语句的效率问题 预备语句PreparedStatement 提高数据处理效率技术概述 数据库接受来自众多客户端传送过来的SQL语句,并尽可能快的执行完操作返回结果。处理SQL语句是一个开销昂贵的操作,而保持数据库连接也是非常消耗系统资源的事情,对于普通的小量应用,看起来每什么问题,但是对于企业级的应用,如果不考虑效率问题,将可能造成很严重的后果。 提高效率的方式很多,有硬件性能的提高,有驱动的优化,有程序的优化,总结起来,常见的技术有: 选择合适的驱动 优化建立的连接 采用连接池技术 优化SQL语句 采用PareparedStatement 采用CallableStatement …… 本讲主要讨论PareparedStatement和连接池技术, CallableStatement将结合存储过程讲解。 数据库处理SQL语句的效率问题 数据库如何执行一个SQL语句? 当数据库收到一个SQL语句后,数据库引擎会首先解析它,检查是否有语法错误。一旦该SQL语句被正确解析,数据库会为它生成一个存取方案(执行最优途径),然后数据库引擎按照此方案执行。存取方案的生成会占用很多CPU处理时间,整个操作在这里付出了很大的开销。 理想的情况应该是,当多次发送同一个SQL语句到数据库,数据库应该能对该SQL语句的存取方案进行重用。事实上,数据库已经具备了这个功能,它们通常会将SQL语句本身作为key,将对应的存取方案作为value存入缓存中,这样数据库引擎就可以对曾经执行过的SQL语句的存取方案进行重用。 数据库处理SQL语句的效率问题 思考1:两次发送 select a from t where b = 0 到数据库,存取方案是怎样重用的? 思考2:下面的代码,存取方案能否重用? Statement stmt = con.createStatement(); for(int i=0; i10000; i++) { ResultSet rs = stmt.executeQuery(select * from employees where dept_id = + i); rs.close(); } 存取方案不会被重用,因为每次循环发送的SQL语句都不同,均会生成新的存取方案,数据库缓存的作用不能发挥。 预备语句PreparedStatement 继承自Statement,但有两方面的不同: PreparedStatement可将SQL语句事先编译并存储,也就是使语句“准备好”: PreparedStatement pstmt = con.prepareStatement(“SQL语句”) 准备好的SQL语句可具有一个或多个IN参数,IN参数的值在SQL语句创建时不指定,而是使用一个 ?作为占位符,每个问号(IN参数)的值必须在该语句执行之前,通过适当的setXxx方法设置。 另外,PreparedStatement中扩展的executeQuery和executeUpdate方法不再需要参数,因为要执行的SQL语句在该PreparedStatement对象创建的时候就准备好了。 如果要重复执行相同形式的SQL语句,使用PreparedStatement效率比Statement高。 举例,比较PreparedStatement和Statement的执行效率 预备语句PreparedStatement 应用举例,使用PreparedStatement向employees表中插入两条纪录,演示PreparedStatement的使用方法。 PreparedStatement适用于相同的SQL语句需要重复执行多次的情形,如果重复次数较多,用批处理的方式执行效率更高: 每次调用完setXxx方法设置好参数后,并不立即直接执行,而是利用addBatch方法将命令先存储起来,直到所有数据都准备好了后,再调用executeBatch方法一起执行。 PreparedStatement相对于Statement的另一个好处: 思考在Statement的execute***(sql)方法中,怎样加入String类型的java变量 * *

文档评论(0)

1亿VIP精品文档

相关文档