Top_N查询的优化
1. 利用非空、索引列作为Order by的列
a. 精简SQL,只剩下对主表的访问,测试这种情况下使用非空索引列排序的性能
b. 如果性能好,逐步添加队其他表的关联,逐步测试性能的影响
2. 排序后,取前N行,使用rowid过滤性能较差,改用分析函数row_number()来实现
比如:
SQL> select *
from (
select ename, sal,
row_number()
over (order by sal desc) rn
from emp
)
where rn <= 3
order by sal desc
/