当前位置:StudyEZ>学易考试社区>IT>数据库>再谈在Oracle中实现搜索分页查询的优化

再谈在Oracle中实现搜索分页查询的优化

上一主题 下一主题
1页, 共1页 (共1楼)

再谈在Oracle中实现搜索分页查询的优化

2007-02-13 3:37 下午
这篇文章写的很精彩,通俗易懂,本人按该方法做了一下试验.
    数据库采用Oracle9i,建立雇员表employee,只包含两个字段 ID、NAME(其中ID具有UNIQUE约束),并向

表中插入20条数据。

    一、假设现在要查询第11~20记录,根据该文的思路,查询应该分两步走:

    1)先用rownum语句从employee表中查询出第1~20条记录到中间结果temptable。SQL语句如下
    select rownum rowno ,employee.* from employee where rownum<=20
   
    2)再从中间结果temptable中查询出行号大于10的记录

    所以最终的SQL语句是:
       
        select * from
          (select rownum rowno,employee.* from employee where rownum<=20) temptable
        where temptable.rowno>10;

    二、假如这个表中的数据量特别大,那么按照该方法步骤一查询的中间结果集将会很庞大,其实这一步

还可以进一步优化,使中间结果集temptable中只包含rowno和能唯一标识一条记录的字段(如employee表中

的ID字段),使中间结果集减到最小,然后从temptable中查询出符合要求的记录的ID,再根据ID从

employee表中查询出完整的记录。

    优化的SQL语句为:

        select * from employee where id in
          (select temptable.id from
            (select rownum rowno,employee.id from employee where rownum<=20) temptable)
           where temptable.rowno>10
          );
60.12.9.222
1页, 共1页 (共1帖)