首页 > 代码库 > sql server 各种查询sql语句的分页存储过的执行效率
sql server 各种查询sql语句的分页存储过的执行效率
create database data_test on primary(name=‘data_test_data‘,filename=‘C:\data_test_data.mdf‘,size=5mb,maxsize=100mb,filegrowth=15%)log on(name=‘data_test_log‘,filename=‘C:\data_test_log.ldf‘,size=2mb,filegrowth=1mb)gouse data_testgocreate table tb_testtable(id int identity (1,1) primary key,username nvarchar(20) not null,userpwd nvarchar(20) not null,userEmail nvarchar(40) null)set identity_insert tb_testtable ondeclare @count intset @count=1while @count<=200000begininsert into tb_testtable (id,username,userpwd,useremail) values(@count,‘admin‘,‘admin888‘,‘lihfei89@163.com‘)set @count=@count+1endset identity_insert tb_testtable off--利用select top and select not in 耗时1533s--select top 10 * from tb_testtable where (id not in(select top 15 id from tb_testtable order by id asc)) order by idcreate procedure proc_page_withnotin(@pageIndex int,--页索引@pageSize int--每页显示数)asbeginset nocount on;declare @timediff datetime --消耗时间declare @sql nvarchar(500)select @timediff =Getdate()set @sql = ‘select top ‘ +str(@pageSize) +‘ * from tb_testtable where (id not in (select top ‘ + str((@pageIndex-1) * @pageSize) +‘ id from tb_testtable order by id)) order by id‘execute(@sql) --因select top后不支技直接接参数,所以写成了字符串@sqlselect datediff(ms,@timediff,Getdate()) as wastetimeset nocount off;end--利用select top and select max耗时33s--select top 10 * from tb_testtable where--(id > (select max(id) from (select top 10 id from tb_testtable order by id ) as temp ))--order by idcreate procedure proc_page_withtopmax(@pageIndex int,@pageSize int)asbeginset nocount on;declare @timediff datetimedeclare @sql nvarchar(500)select @timediff=getDate()set @sql=‘select top 10 * from tb_testtable where (id> (select max(id) from (select top ‘+str((@pageIndex-1)*@pageSize)+‘ id from tb_testtable order by id) as temp)) order by id‘execute(@sql)select datediff(ms,@timediff,getdate()) as wastetimeset nocount off;end--利用Row_number()耗时1633s--select * from (select *,row_number() over(order by id) rn from tb_testtable) as temp where rn between 11 and 20create procedure proc_pagewithrownumber(@pageIndex int,@pageSize int)asbeginset nocount on;declare @timediff datetimedeclare @sql nvarchar(500)select @timediff=getdate()set @sql=‘select * from (select *,row_number() over (order by id) rn from tb_testtable) as temp where rn between ‘+str((@pageIndex-1)*@pageSize +1 )+‘ and ‘ +str(@pageIndex*@pageSize)execute(@sql)select datediff(ms,@timediff,getdate()) as wastetimeset nocount off;endexec proc_page_withnotin 2,100000-- wastetime(1533)exec proc_page_withtopmax 2,100000--wastetime(33)exec proc_pagewithrownumber 2,100000--wastetime(1633)
sql server 各种查询sql语句的分页存储过的执行效率
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。