SQL Server 多种分页查询效率
2015-09-04 14:10
218 查看
关于SQL语句分页,网上也有很多,我贴一部分过来,并且总结自己已知的分页到下面,方便日后查阅。
SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id
--顺序写法:
SELECT TOP 页大小 *
FROM table1
WHERE id >=
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP (页大小*(页数-1)+1) id FROM table1 ORDER BY id
) A
)
ORDER BY id
--降序写法:
SELECT TOP 页大小 *
FROM table1
WHERE id <=
(
SELECT ISNULL(MIN(id),0)
FROM
(
SELECT TOP (页大小*(页数-1)+1) id FROM table1 ORDER BY id Desc
) A
)
ORDER BY id Desc
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的游标存储过程分页) 效率最差,但是最为通用
http://www.wxzzz.com/457.html http://www.cnblogs.com/morningwang/archive/2009/01/02/1367277.html
方法1
适用于 SQL Server 任何版本SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id
方法2
适用于 SQL Server 任何版本--顺序写法:
SELECT TOP 页大小 *
FROM table1
WHERE id >=
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP (页大小*(页数-1)+1) id FROM table1 ORDER BY id
) A
)
ORDER BY id
--降序写法:
SELECT TOP 页大小 *
FROM table1
WHERE id <=
(
SELECT ISNULL(MIN(id),0)
FROM
(
SELECT TOP (页大小*(页数-1)+1) id FROM table1 ORDER BY id Desc
) A
)
ORDER BY id Desc
方法3
适用于 SQL Server 2005SELECT 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的游标存储过程分页) 效率最差,但是最为通用
http://www.wxzzz.com/457.html http://www.cnblogs.com/morningwang/archive/2009/01/02/1367277.html
相关文章推荐
- Oracle EBS MRP模块之预测冲减
- mysql默认事物隔离级别实践
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- mysql多表连接
- hibernate针对mysql5做出的优化
- 数据库索引
- Redis
- MYSQL中delete删除多表数据与删除关联数据
- Oracle常用查看表结构命令
- 关于获取表中自增列最新的产生值
- SQL Server SA 最佳实践(也许不仅仅是翻译)
- SQL Server SA 最佳实践(也许不仅仅是翻译)
- sqlite 索引
- SQL Server SA 最佳实践(也许不仅仅是翻译)
- Redis命令
- mysql使用source 命令乱码问题解决方法
- Redis安装
- redis 集群部署(二)
- SQLite/嵌入式数据库
- SQLite/嵌入式数据库