必威体育Betway必威体育官网
当前位置:首页 > IT技术

SQL Server分页查询

时间:2019-10-06 21:43:22来源:IT技术作者:seo实验室小编阅读:56次「手机版」
 

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 2005 配置发送邮件

这个教程是使用SQL Server Management Studio的管理工具完成配置的,其实这个配置也可以通过一系列的SQL语句完成配置。 使用SQL语

用百度和天猫的案例分析:IP 形象可以怎么用?

近年来互联网公司纷纷打造自己的IP形象,一方面是IP形象能让用户快速建立品牌联想与品牌识别,另一方面是IP时代的到来。这个大时代可

分享到:

栏目导航

推荐阅读

热门阅读