浏览 4487 次
锁定老帖子 主题:SQL三种分页方案
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-16
最后修改:2011-10-17
SQL法、储过程法、游标法。 游标耗资、效率低; 存储过程不错,因为存储过程是经过预编译的效率高、灵活。 这里介绍SQL分页法(这里用的sqlserver2000 ,其它数据库原理相同): 方法1: 适用于 SQL Server 2000/2005 SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) ORDER BY id 方法2: 适用于 SQL Server 2000/2005 SELECT TOP 页大小 * FROM table1 WHERE id > ( SELECT ISNULL(MAX(id),0) FROM ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) A ) ORDER BY id 方法3: 适用于 SQL Server 2005 SELECT TOP 页大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 ) A WHERE RowNumber > 页大小*(页数-1) 说明,页大小:每页的行数;页数:第几页。使用时,请把“页大小”和“页大小*(页数-1)”替换成数字。 其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。 建议优化的时候,加上主键和索引,查询效率会提高。 通过SQL 查询分析器,显示比较:我的结论是: 分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-10-17
sqlserver2000
史上分页最费劲知名数据库 如果你还在用2000做项目,呵呵,想必除了分页以外,还会有很多意外的惊喜。 |
|
返回顶楼 | |
发表时间:2011-10-18
caoyangx 写道 sqlserver2000
史上分页最费劲知名数据库 如果你还在用2000做项目,呵呵,想必除了分页以外,还会有很多意外的惊喜。 没用过2000的表示安慰... |
|
返回顶楼 | |
发表时间:2011-10-18
MySQL的话,只需要用 limit offset,pagesize 即可。哪来这么多麻烦事
|
|
返回顶楼 | |
发表时间:2011-10-18
方法3:
我昨天刚试的 好像比 方法1 要快啊 这怎么回事? |
|
返回顶楼 | |