一切都因为分页-再谈分页
2004-11-19 14:19
218 查看
很久没有被分页困惑了,因为一直以来操作的表中数据量都不大,所以很偷懒地使用了纪录集的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排序的话,就会很麻烦,可以想到的解决方法是,将上面的做为子查询,外面再套一层查询~
如果看不明白的话,抱歉,那只说明俺的表达能力低虐~而已~
呵呵~所以不用放心上啦!
)
、)
)
解决的思路是,找到一种方法,只读出需要的记录~呵呵~
比较常见的是利用了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排序的话,就会很麻烦,可以想到的解决方法是,将上面的做为子查询,外面再套一层查询~
如果看不明白的话,抱歉,那只说明俺的表达能力低虐~而已~
呵呵~所以不用放心上啦!
)
、)
)
相关文章推荐
- 在线电影/电视/音乐/FLASH/EMAIL地址超强侦探
- 十种老板不可追随
- 3D游戏引擎设计与实现(14)
- C#高级编程(第二版)
- 中国无线国标:突围进行时
- 同年同月同日出生的爱情
- 管理寓言:狐狸抓鸡
- 在c#中操作xml
- 结婚的WBS(工作分解结构)
- 带图片的,多列的DropDownList的实现
- Java的执行效率完全可以比C/C++的好
- MPlayer安装
- 匆匆
- 放弃也是一种美丽
- 创建名字空间(namespaces)
- 用VC遍历文件夹中的所有文件及文件夹
- 程序员应具备的素质
- 基类与接口混合继承的声明问题 [C#, Design]
- 【专题】window.open的例子和使用方法以及参数说明(完整版)
- tomcat下的jsp和servlet的字符编码问题