Java堂  


SQL Server JDBC 1.0中提高Select的效率

归档在: Database — Jet @ 3:00 下午
原文出处: http://www.javatang.com/archives/2006/05/07/002930.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

如下一段代码, 其中myArray为一个存储数据的数组:

  1. // 建立Connection
  2. for(int i = 0; i < myArray.length; i ++){ 
  3.     link = myArray[i];
  4.     if(link == null) 
  5.         continue;
  6.     else 
  7.         link = link.replaceAll("'", "''");
  8.     String query = "Select Top 1 a_id From _osd_article Where link='" + link + "'";
  9.     Statement s = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
  10.     ResultSet rs = s.executeQuery(query);
  11.     boolean have = rs.next();
  12.     rs.close();
  13.     s.close();
  14.     if(have) 
  15.         continue;
  16. } 
  17. // 释放Connection...

执行之后发现Select的速度非常的慢, 并且在执行的过程中出现CPU使用率100%的情况. 查阅了一些资料, 原来是由于SQL Server JDBC 1.0默认的SelectMethod为direct造成的. 在direct模式下, 每一个Connection必须只对应一个Statement, 所以在查询的时候系统资源占用非常的高; 另外, direct模式下也容易产生互锁的事务. 如果修改为cursor模式就可以了. 关于驱动连接的参数以及详细的说明可以见参考资料.

参考资料:
Why is com.microsoft.jdbc.sqlserver.S-QLServerDriver so slow?
http://groups.google.com/group/microsoft.public.sqlserver.jdbcdriver/browse_thread/
thread/c11b52262f313bcb/c293b3aef59bb71a?q=select+slow&rnum=2

(SQL Server JDBC) Connection String Properties
http://www.csuchico.edu/computing/JAVAINFO/MS_SQLSERVER.JDBC/jdbcsqlsrv3.html
JDBC连SQL SERVER数据库常见问题
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=123&threadID=18621

没有评论 »

还没有评论。

发表您的评论