发表于2014-04-10 18:48:38
数据分页是讨论比较广泛的一个基础性问题,特别是数据量比较大的情况下,本文列举SQL Server中几种常见的分页方法:
这是一个在很多年前,别特是SQL2000盛行的时候很流行的分页方法,当然,现在还在使用,使用示例:
select top 10 * from t_news where id not top in (select top 20 id from t_news)
点评:很经典的分页方法,通用性比较好!
row_number是SQL2005新增的内容,必须是SQL2005及以上版本才支持,使用示例:
select * from ( select * from row_number() over(order by id desc) as n,* from t_news ) where n >=30 and n<40
点评:如果是数据库不是2000,推荐使用此方法替代top……not top in
这种分页最理想的情况是主键为数字类型且使用主键顺序或者倒序,另外上一页,下一页也可以使用本方法,使用示例:
select top 10 * from t_news where id>11024
或者
select top 10 * from t_news where id>(select max(id) from (select top 20 id from t_news) t)
点评:效率不错,不过局限性比较多,比如如果需要自定义排序……!
另外如果是mysql或者sqlite还可以使用limit