Sqlserver2005-几种分页sql语句的比较

平台与环境:
CPU:Intel(R) Pentium(R) Dual T2390 1.86GHz
内存:1G(系统正常启动后约占300M空间)
硬盘:SATA 160G 8M Cache
系统:windowsxp+Sql Server 2005 sp2
测试数据:共100万条

分页测试代码:
1)row_number的两种分页方式:分别用top和between过滤
2)包含子查询结果的三种分页方式
共5种方式。

方式1:
每页显示200条
分页至10万条之后的第两百条记录
PROCEDURE [dbo].[proc_select_moauser1]
AS
BEGIN
SET NOCOUNT ON;
   declare @tdiff datetime
   set @tdiff=getdate()
   select top 200 * from(select row_number() over(order by uid asc) as rownumber,* from moa_user ) as tb where rownumber>100000
   select datediff(ms,@tdiff,getdate()) as ‘耗时(毫秒)’
END
响应时间:156ms-210ms

方式2:
每页显示200条
分页至10万条之后的第两百条记录
PROCEDURE [dbo].[proc_select_moauser2]
AS
BEGIN
– SET NOCOUNT ON added to prevent extra result sets from
– interfering with SELECT statements.
SET NOCOUNT ON;

   — Insert statements for procedure here
declare @tdiff datetime
   set @tdiff=getdate()
   select * from(select row_number() over(order by uid asc) as rownumber,* from moa_user ) as tb where rownumber between 100000 and 100200
   select datediff(ms,@tdiff,getdate()) as ‘耗时(毫秒)’
END
响应时间:153ms-176ms

方式3
每页显示200条
分页至10万条之后的第两百条记录

PROCEDURE [dbo].[proc_select_moauser3]
AS
BEGIN
– SET NOCOUNT ON added to prevent extra result sets from
– interfering with SELECT statements.
SET NOCOUNT ON;
  declare @tdiff datetime
   set @tdiff=getdate()
   select top 200  * from moa_user a  where uid  not in(select top 100000  uid  from moa_user  b order by uid)
   select datediff(ms,@tdiff,getdate()) as ‘耗时(毫秒)’
END

响应时间:270ms-290ms
方式4:
每页显示200条
分页至10万条之后的第两百条记录
PROCEDURE [dbo].[proc_select_moauser4]
AS
BEGIN
– SET NOCOUNT ON added to prevent extra result sets from
– interfering with SELECT statements.
SET NOCOUNT ON;
   declare @tdiff datetime
   set @tdiff=getdate()
   — Insert statements for procedure here
 select * from ( select TOP 200 * FROM ( SELECT TOP 100000 * from moa_user ORDER BY uid ASC ) as amoaUser ORDER BY uid DESC ) as bmoaUser ORDER BY uid ASC
   select datediff(ms,@tdiff,getdate()) as ‘耗时(毫秒)’   
END
响应时间:950ms

方式5:
每页显示200条
分页至10万条之后的第两百条记录
PROCEDURE [dbo].[proc_select_moauser5]

AS
BEGIN
– SET NOCOUNT ON added to prevent extra result sets from
– interfering with SELECT statements.
SET NOCOUNT ON;

   — Insert statements for procedure here
declare @tdiff datetime
   set @tdiff=getdate()
   — Insert statements for procedure here
 SELECT TOP 200 * FROM moa_user WHERE (uid > (SELECT MAX(uid) FROM (SELECT TOP 100000 uid FROM moa_user ORDER BY uid) AS temp_moa_user)) ORDER BY uid
   select datediff(ms,@tdiff,getdate()) as ‘耗时(毫秒)’   
END
响应时间:135ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值