优化使用ROWNUM进行分页查询的SQL
来源:互联网 发布:mac无主之地2没有繁体 编辑:程序博客网 时间:2024/06/06 14:24
下面这个SQL是web页面查询分页显示的一个常见用法:
select *
from (select row_.*,rownumpafa_rownum
from (selecta.id_qt_wait_task_infotaskId, a.department_codedepartmentCode, insuranceEndTime,......
fromqt_wait_task_info a
where 1 = 1
anda.task_state in ('B0','B1', 'B2', 'B3')
ANDa.plan_code = :1
ANDa.date_input <to_date(:2, 'yyyy-mm-dd') + 1
ANDa.date_input >=to_date(:3, 'yyyy-mm-dd')
ANDnvl(a.key_customer_id, ' ') !='SANY'
AND (upper(a.input_by_id) =upper(:4))) row_)
where pafa_rownum<= :5 andpafa_rownum> :6;
这个SQL平均执行时间310毫秒,执行计划是:
现在我们将where后面红色的部分做一个改写:
select *
from (select row_.*, rownumpafa_rownum
from (select a.id_qt_wait_task_infotaskId, a.department_codedepartmentCode, insuranceEndTime,......
from qt_wait_task_info a
where 1 = 1
and a.task_state in ('B0','B1', 'B2', 'B3')
AND a.plan_code = :1
AND a.date_input < to_date(:2, 'yyyy-mm-dd') + 1
AND a.date_input >= to_date(:3, 'yyyy-mm-dd')
AND nvl(a.key_customer_id, ' ') !='SANY'
AND (upper(a.input_by_id) =upper(:4))) row_ where rownum<=:5)
where pafa_rownum> :6;
再来看一下执行计划与consistent reads:
各位研发的朋友,分页查询SQL不能再任性随意写了,性能差距太大了。
有人说你这个没有order by,为什么? 那是因为加了order by后原来的SQL要跑180多秒,根本不可能满足业务需求。而加了order by 的改写SQL,执行时间只需要0.28秒。
rownum分页查询的sql还有一个性能方面需要注意的是到底使用order by字段的索引还是使用where子句后面谓词条件的索引,这个一般要靠优化器自己去计算,有时候优化器计算不太准确,可能需要加Hint来强制选择性能好的索引。
- 优化使用ROWNUM进行分页查询的SQL
- rownum进行分页查询
- oracle 使用rownum进行分页的陷阱
- 数据库中的分页查询rownum的使用
- oracle分页查询及rownum的使用
- oracle 使用rownum进行分页
- 查询分页--oracle的rownum
- Oracle的rownum原理和使用(分页查询)
- Oracle的rownum原理和使用(分页查询)
- oracle中分页查询使用ROWNUM的问题
- 使用rownum对oracle结果集快速分页的sql
- oracle使用rownum进行分页语句详解
- oracle使用rownum做分页查询
- SQL分页查询优化
- 分页查询-sql优化
- rownum与Oracle分页SQL 以及提高分页查询效率
- Oracle SQl语句----使用rownum分页
- rownum分页查询
- 基于hibernate的BaseDAO接口
- OpenGL--自动生成纹理坐标
- android 抓包
- Linux 网络编程——套接字的介绍
- 中文乱码的解决办法
- 优化使用ROWNUM进行分页查询的SQL
- 有道推出了ubuntu版本
- Excel-数据分类导出至多个Sheet NPOI.dll
- 聚合函数min和distinct起到一样的作用
- 解决Android在listview中checkbox批量操作问题
- android设计概述
- Content Security Policy介绍
- 【Java】读取其下所有文件夹与文件的路径
- 鼠标放在物体上,就弹出属性框