为什么不使用游标比使用游标要快?
我想知道的是当应用程序访问数据库时,使用游标和不使用游标时,数据库都做了什么,都耗费了哪些资源?
在java中,Statement st = conn.createStatement (ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);//结果集只能向前滚动,不能自由定位行。我理解的是不使用游标。
while (rs.next()) {
}
,每执行一次循环,虚拟机内存就增加一点。应该是访问了一次数据库。
-----------------------------------------------------------------------------
如果:Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);//结果集可以自由定位。假如设置fetchSize=100。
while (rs.next()) {
}
则第一次执行rs.netx(),虚拟机内存就消耗约100个行大小,从内存中遍历完这100行后,再从数据库取100行。
在以上两种情况下,似乎总是第一种效率高。请问这两种情况下,数据库都做了怎样的工作?第一种情况下,应用程序是如何从数据库中取数据的,游标又为何会慢?对于数据库来说,使用不使用游标对系统内存有何不同的影响?