SQL Server JDBC 1.0中提高Select的效率
原文出处: http://www.javatang.com/archives/2006/05/07/002930.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!
如下一段代码, 其中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
没有评论 »
还没有评论。