您的位置:首页 > 数据库 > Oracle

今天看到一份资料上有讲到Oracle分页优化

2013-12-06 17:37 585 查看
今天看到一份资料上有讲到Oracle分页处理时的查询优化方式,其思路是:对于要查询多列数据的一个分页查询语句,可以在内部的Oracle查询rownum时,不查询出所有要需要的列,而是查询一个rowid,再用一个表连接的方式,来查询所需要的列,这样就不会使用太多的*来查询,Oracle的sql语句解析器也就不会在解析sql语句时,消耗更多的资源,例子如下:

一般的查询分页查询方式是:
SELECT * FROM
( SELECT a.* ,ROWNUM rn FROM --取得rownum值
(SELECT t.* FROM dept t ORDER BY t.deptno)a --查询整表的数据列,并按表某一个字段进行排序
WHERE ROWNUM<20) --对rownum大于20的进行过滤
WHERE rn>2 --对rownum大于2的进行过滤

现在新的做法是:

SELECT t.* FROM dept t, --表连接,关联查询
(SELECT rd FROM ( --取得所有的rowid
SELECT rd,rn FROM
(SELECT ROWID rd,ROWNUM rn FROM dept ORDER BY deptno) --查询整表rowid和rownum,并按进行排序
WHERE rn<20) --过滤rownum大于20的数据
WHERE rn >2) t1 --过滤rownum小于2的数据
WHERE t.ROWID = t1.rd
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: