SQL Server JDBC 1.0中提高Select的效率

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

// 建立Connection
for(int i = 0; i < myArray.length; i ++){ link = myArray[i]; if(link == null) continue; else link = link.replaceAll("'", "''"); String query = "Select Top 1 a_id From _osd_article Where link='" + link + "'"; Statement s = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = s.executeQuery(query); boolean have = rs.next(); rs.close(); s.close(); if(have) continue; } // 释放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

发表评论

电子邮件地址不会被公开。 必填项已用*标注