这个问题的本质是,如何从一个查询中返回按某种顺序排列的特定位置的数据。
从目前的解决办法来看,有几种类型:
1、利用服务器端游标,这个在Web程序中非常不可取。消耗的资源很大,很容易把服务器搞死。特别对一些数据量很大的查询更是如此。分页只是减少了返回的数据量,但是服务器端还是查询了所有的数据,还要保持对数据库的连接,数据库的资源还是被消耗了。
2、利用嵌套的sql来查询某一页的数据。这个办法可以不用服务器端游标,但是仍然消耗了很多数据库的资源。特别是在访问页码比较大的页面的时候。页码越大,消耗资源越多。Hibernate就是用的这种办法。
3、用缓存查询的主键的办法来查询。就是一次查一页的数据,下次查主键大于第一页的主键的办法来查询。这个办法对于顺序访问非常好,速度很快,但是跳页的时候不适合。而且,要知道查询结果的总条数,必须select count,有时候,select count也是很耗资源的。微软的解决方案是推荐这种方法的。
4、折衷组合以上办法。
其实,微软的断开式数据集对于提高服务器性能还是大有好处的。使用java,也可以用同样的思路,搞一套只用快速只进游标的查询类库和断开连接的数据容器。
关键,还是要做好分页问题。
更新的效率,其实并不是很重要(当然,数据库结构要合理),查询的效率,始终是个大问题。
本文地址:http://com.8s8s.com/it/it13425.htm