2005几种分页方法

通过SQL
查询分析器,显示比较:我的结论是:分页方案二:(利用ID大于多少和SELECT
TOP分页)效率最高,需要拼接SQL语句分页方案一:(利用Not In和SELECT
TOP分页)
效率次之,需要拼接SQL语句分页方案三:(利用SQL的游标存储过程分页)
效率最差,但是最为通用

如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。建议优化的时候,加上主键和索引,查询效率会提高。

新金沙官网,通过SQL
查询分析器,显示比较:我的结论是:分页方案二:(利用ID大于多少和SELECT
TOP分页)效率最高,需要拼接SQL语句分页方案一:(利用Not In和SELECT
TOP分页)
效率次之,需要拼接SQL语句分页方案三:(利用SQL的游标存储过程分页)
效率最差,但是最为通用

1.如果有一个自动增长的id字段,则:

定义二个变量:Page,PageCount

金沙注册网站,Select top PageCount * From [tb_code] Where id=(select min(id)
from (select top (Page-1)*PageCount+1 id from [tb_code] order by
id desc) as t) order by id desc

原理,根据ID计算出(Page-1)页的最小值,然后用TOP关键字及可解决问题。

2.SELECT TOP 10 id,username From [tb_code] where id not in ( SELECT
TOP 20000 id FROM tb_code ORDER BY username)

优点:此方法可以根据表中的任一个字段排序,在一个表中有几百万条记录时,仍有很高的效率,缺点是在大数据量的情况下效率略逊于第一种

3.SELECT TOP 10 id,username From (SELECT TOP page*pagecount id,
username FROM tb_code ORDER BY username) DERIVEDTBL ORDER BY username
DESC

优点:此方法可以根据表中的任一个字段排序. 缺点是效率最低

在SQL Server 2005中使用rownum分页

比方说要从表USER中查看第10到第20条之间的数据,那么SQL是这样实现的

SELECT * FROM (SELECT rownum rowcount,USER.* FROM USER) WHERE
ROWCOUNT =10 AND ROWCOUNT 20

有关分页 SQL
的资料很多,有的使用存储过程,有的使用游标。本人不喜欢使用游标,我觉得它耗资、效率低;使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活。先看看单条
SQL 语句的分页 SQL 吧。

方法1:适用于 SQL Server 2000/2005

SELECT TOP 页大小 *FROM table1WHERE id NOT IN ( SELECT TOP
页大小*(页数-1) id FROM table1 ORDER BY id )ORDER BY id

方法2:适用于 SQL Server 2000/2005SELECT TOP 页大小 *

FROM table1WHERE 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 ) AWHERE RowNumber 页大小*(页数-1)

说明,页大小:每页的行数;页数:第几页。使用时,请把页大小和页大小*(页数-1)替换成数字

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图