sql分页
sql Server分页查询
查询第n到第m条记录
方法一(简洁):
-- 从表[demo].[dbo].[demo]中取出第n到第m条记录
SELECT TOP m-n+1 *
FROM [demo].[dbo].[demo]
WHERE id NOT IN (
SELECT TOP n-1 id
FROM [demo].[dbo].[demo]
)
方法二(效率更高):
-- 从表[demo].[dbo].[demo]中取出第n到第m条记录
SELECT TOP m-n+1 *
FROM [demo].[dbo].[demo]
WHERE id > (
SELECT MAX(id)
FROM (
SELECT TOP n-1 id
FROM [demo].[dbo].[demo]
order BY id
) T
)
ORDER BY id
----警告!!!
----此查询方法有错,当n=1时查不到数据
应改为:
SELECT TOP m-n+1 *
FROM [demo].[dbo].[demo]
WHERE id >= (
SELECT MAX(id)
FROM (
SELECT TOP n id
FROM [demo].[dbo].[demo]
ORDER BY id
) T
)
ORDER BY id
--于2018/10/29更新 张岩
注:查询时可尽可能多的使用“TOP”关键字,可显著提高查询效率
在数据量比较大时切勿用方法一
完整的测试数据在这:
------------- 数据初始化 ----------------
declare @i int
set @i=0
while @i<110010
begin
insert into [demo].[dbo].[demo](name,name2,bz) values('第n行','第n行','n')
set @i+=1
end
-------- 测试表总数据量为110010条 -----------
-------------- 方法二(高效率的方法) ---------------------
declare @PageSize int --页大小
declare @PageIndex int --页码数
declare @date datetime --记录SQL执行时间
set @PageSize=50
set @PageIndex=1990
set @date=GETDATE()
begin
SELECT TOP (@PageSize) *
FROM [demo].[dbo].[demo]
WHERE id > (
SELECT MAX(id)
FROM (
SELECT TOP (@PageSize*(@PageIndex-1)) id
FROM [demo].[dbo].[demo]
ORDER BY id
) T
)
ORDER BY id
set @i+=1
end
select GETDATE()-@date
--------------------- 平均用时37毫秒 -----------------------
---警告!!!
---方法二有错,当查询页码为第一页时无法查出来数据
---应该为:
declare @PageSize int --页大小
declare @PageIndex int --页码数
set @PageSize=50
set @PageIndex=1990
SELECT TOP (@PageSize) *
FROM [demo].[dbo].[demo]
WHERE id >= (
SELECT MAX(id)
FROM (
SELECT TOP (@PageSize*(@PageIndex-1)+1) id
FROM [demo].[dbo].[demo]
ORDER BY id
) T
)
ORDER BY id
----于2018/10/29更新 张岩
-----------------------------------------------------------------------------
------------------ 方法一(大数据量时效率较低) -----------------------
declare @PageSize int --页大小
declare @PageIndex int --页码数
declare @date datetime --记录执行时间
set @PageSize=50
set @PageIndex=1990
set @date=GETDATE()
begin
SELECT TOP (@PageSize) *
FROM [demo].[dbo].[demo]
WHERE (id NOT IN
(SELECT TOP (@PageSize*(@PageIndex-1)) id
FROM [demo].[dbo].[demo])
)
ORDER BY id
end
select GETDATE()-@date
--------------------- 平均用时3分30秒 -----------------------
推荐文章:http://www.cnblogs.com/hyd1213126/p/5828937.html
相关阅读
上班族兼职工作分享:上班族兼职工作时,我相信所有的人都有同样的感觉。为什么?由于生活的压力,许多家庭现在背负着汽车贷款、抵押贷款
我们在购物时,经常会遇到在多个商品中选择的问题,尤其是对于高价值的商品,盖得排行就是为解决这个问题而生。在购物环境日趋完善、消
天猫分期购其实就和名字一样,指的是在天猫商城购物可以进行分期。这是天猫商城推出的一项服务哦,对于这一项分期服务,很多的人在质疑
这个教程是使用SQL Server Management Studio的管理工具完成配置的,其实这个配置也可以通过一系列的SQL语句完成配置。 使用SQL语
近年来互联网公司纷纷打造自己的IP形象,一方面是IP形象能让用户快速建立品牌联想与品牌识别,另一方面是IP时代的到来。这个大时代可