Sqlserver中分页,2012后支持offset + fetch,2012之前用rownum嵌套查询

SQL分页查询优化
本文探讨了使用SQL的OFFSET FETCH进行分页查询的方法,并对比了不同数据库版本的支持情况。当遇到旧版数据库不支持该语法时,提供了一种替代方案,通过ROW_NUMBER()进行排序并限制结果集,以实现相同的功能。

今天发现原先用的sql offset fetch好用,换了一个DB就歇菜

 

歇菜截图

比较了一下,是数据库版本的问题

一个是13,一个是10

版本低的不支持用offset + fetch 进行分页,mssql2012之后才支持用offset + fetch

所以如果DB版本低了,我就需要改查询语句,改成以下的样子【根据rownum进行排序,再将查询结构查一遍,注意别名前面的原字段名要删除】

本来想着测一下两种分页查询的性能,结果DBA小哥哥瞬间帮我换了个新库,哈哈哈。暂时懒得比较性能了,以后有空直接用哪个jmeter查询比较下。

 

原先的
select bug_id,project_name,cr_name,bug_cr_num,bug_task_num,object_name,bug_description,bug_rca,bug_solution,b.employ_name developer,a.employ_name tester,qa_creationdt,qa_updatedt,bug_deleted_flag,status_des
from qa_buglist
join qa_project on bug_project_id = project_id  
join qa_crtype on cr_id = bug_cr_type_id  
join qa_rtype on object_id = qa_type_id  
join qa_employ a on a.employ_id = qa_tester_id and a.employ_group = 1   
join qa_employ b on b.employ_id= qa_assignee_id and b.employ_group = 2  
join qa_bugstatus on status_id =  bug_status_id
where bug_deleted_flag =0 order by 1 desc offset  0  rows fetch next  20 rows only


更新的
SELECT bug_id,project_name,cr_name,bug_cr_num,bug_task_num,object_name,bug_description,bug_rca,bug_solution, developer, tester,qa_creationdt,qa_updatedt,bug_deleted_flag,status_des FROM (
	SELECT ROW_NUMBER()OVER(ORDER BY bug_id desc) AS rowid,bug_id,project_name,cr_name,bug_cr_num,bug_task_num,object_name,bug_description,bug_rca,bug_solution,b.employ_name developer,a.employ_name tester,qa_creationdt,qa_updatedt,bug_deleted_flag,status_des
from qa_buglist
join qa_project on bug_project_id = project_id  
join qa_crtype on cr_id = bug_cr_type_id  
join qa_rtype on object_id = qa_type_id  
join qa_employ a on a.employ_id = qa_tester_id and a.employ_group = 1   
join qa_employ b on b.employ_id= qa_assignee_id and b.employ_group = 2  
join qa_bugstatus on status_id =  bug_status_id
where bug_deleted_flag =0
) TAB
WHERE rowid BETWEEN 0 AND 20
ORDER BY bug_id desc

  

 

转载于:https://www.cnblogs.com/qianjinyan/p/10469722.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值