一切都因为分页-再谈分页

王朝asp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

很久没有被分页困惑了,因为一直以来操作的表中数据量都不大,所以很偷懒地使用了纪录集的PageSize与AbsolutePage。这个的弊端就是一次性地把用到用不到的记录全读出来了,记录数一多就很慢。

解决的思路是,找到一种方法,只读出需要的记录~呵呵~

比较常见的是利用了IN 操作符,例如

SELECT TOP PageSize * From A WHERE id NOT IN (SELECT TOP PageSize*PageNo id FROM A WHERE )

注意一下加红的那部分,select 语句中用到的是他们的值

同样的,数据不是很多的话还行,多了同样是不行的,因为IN的效率不高嘛

思来想去,找到一个方法,利用了id(俺一直是把它设成自增的)的一个特性,

id是从小到大排的,其实只要找到当前页最小id应该大于多少,然后再用上TOP 操作符。

看看

SELECT TOP PageSize * FROM A WHERE id > MinID

第一页的 MinID 当然是 0,然后就可以得出第一页最大的id值,它正是第二页中id必须大于的值,类推~

当然,有一个问题,如果你想直接跳到指定页~~那就不好办了:(

跳到最后一页到还是很简单的,只要使用ORDER BY id DESC

这个思想还是有个破绽呀,如果不按id排序的话,就会很麻烦,可以想到的解决方法是,将上面的做为子查询,外面再套一层查询~

如果看不明白的话,抱歉,那只说明俺的表达能力低虐~而已~

呵呵~所以不用放心上啦!

、)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有