批量更新:
PreparedStatement并不能减少sql的执行数目. 参数传入多少次,就会执行多少条sql.
在一个事务中,由于Statement与PrestatedStatement都使用的同一个连接. Statement不会再象过去每次都去获取连接. 这种情况下,反而可以利用Statement优化PreparedStatement. 减少sql的执行条数. 但是每条sql会编译,获得执行计划.
示例1:质量度更新:
比如关键词在审核的过程中先去查询A表,得到该词的历史质量度, 如果有,就更新B表中的质量度值.
调优后的方法:
上面调优之后,由以前的kslist条sql变成了现在的5条sql,但是这5条sql都会重新编译.
经测试:10个Key感觉差别不是特别明显. 都在16ms. 结论待定.
示例2: 在广告系统中配对的批量插入与批量更新的一个优化示例:
批量广告插入最初使用的是merge into.但是即使使用的PreparedStatement的sql,仍然要执行25W次.
比如应用程序中形成的了一个配对的集合,包含了25W个元素.通过jdbcTemplate的batchUpdate批量插入这些元素,并且还需要判重,使用的sql如下:
为了在同时使用PreparedStatement的时候,将这25W条sql降下来,重构应用程序如下:在应用程序中形成ideaid-keylist的集合,针对每个idea对应的key做下面的操作,执行sql数目=idea的数目.
大数据量查询的二种方式:
1. 一种全部查询到内存,然后使用subList, subList的场景比如in参数的限制.