jdbc执行sql慢的问题_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > jdbc执行sql慢的问题

jdbc执行sql慢的问题

 2014/6/11 19:39:19  culven  程序员俱乐部  我要评论(0)
  • 摘要:今天发现JDBC的一个怪问题。同样的sql,在mysql客户端中执行只要0.6、7秒,但是在JDBC中执行却要十二三分钟!这差距也太大了!而且只是其中一张表如此,查看表结构,很正常,没有索引,连主键都没有,就只有字段,字段类型也没有BLOB、CLOB之类的大数据类型,和其他表相比,字段数量也差不错。那就奇怪了,虽说JDBC是要慢些,但是不至于差别几百倍吧。再对比sql,唯一不同的就是这个慢的sql中使用了大量的convert函数,难道是这个原因?把函数去掉,果然速度提升起来了,和其他表一样快了
  • 标签:问题 执行 SQL
今天发现JDBC的一个怪问题。
同样的sql,在mysql客户端中执行只要0.6、7秒,但是在JDBC中执行却要十二三分钟!这差距也太大了!而且只是其中一张表如此,查看表结构,很正常,没有索引,连主键都没有,就只有字段,字段类型也没有BLOB、CLOB之类的大数据类型,和其他表相比,字段数量也差不错。那就奇怪了,虽说JDBC是要慢些,但是不至于差别几百倍吧。再对比sql,唯一不同的就是这个慢的sql中使用了大量的convert函数,难道是这个原因?把函数去掉,果然速度提升起来了,和其他表一样快了!由于插入该表需要把中文改成GBK编码,因而使用了大量的CONVERT函数,而且数据量上万,导致使用JDBC执行超级慢。至于为何如此,那就不太清楚原因了,后面再研究下,或者有高手指点下就更好。
那怎么解决这个问题呢?很简单,在执行sql的preparedStatement中有个设置编码的方法:preparedStatement.setBytes,把占位符的数据用getBytes(Charset)转换编码后设进去即可,如:
class="java" name="code">preparedStatement.setBytes(1, valeue.getBytes(Charset.forName("GBK"))); //其中1为对应的占位符位置
?
发表评论
用户名: 匿名