三种oracle分布查询方式的比较总结
1.使用RowId
select * from emp where rowid in (
select rid from (
select rownum rn,rid from(
select rowid rid from emp order by sal desc
)where rownum<=10
)where rn >=5
) order by sal desc;
--6行被选择耗时0.015秒,这种效率最高
select * from emp where rowid in (
select rid from (
select rownum rn,rid from(
select rowid rid from emp order by sal desc
)
)where rn between 5 and 10
) order by sal desc;
--6行被选择耗时0.031秒
一般来说,第一个查询的效率比第二个高得多,这是由于CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第3层的查询条件WHERE ROWNUM <= 10就可以被Oracle推入到内层查询中,这Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
2.使用分析函数
select * from (
select t.*,row_number() over(order by sal desc) rn from emp t
)where rn between 5 and 10;
--6行被选择耗时0.031秒
3.使用RowNum
select * from (
select t1.*,rownum rn from (
select * from emp order by sal desc
) t1 where rownum<=10
) where rn>=5;
--6行被选择耗时0.032秒
select * from (
select t1.*,rownum rn from (
select * from emp order by sal desc
) t1
) where rn between 5 and 10;
--6行被选择耗时0.062秒 ,效率最底
相关文档:
本系列文章导航
[Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧
[Oracle]高效的PL/SQL程序设计(二)--标量子查询
[Oracle]高效的PL/SQL程序设计(三)--Package的优点
[Oracle]高效的PL/SQL程序设计(四)--批量处理
[Oracle]高效的PL/SQL程序设计(五)--调用存储过程返回结果集
[Oracle]高效的PL/SQL程序设计(六)- ......
本系列文章导航
[Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧
[Oracle]高效的PL/SQL程序设计(二)--标量子查询
[Oracle]高效的PL/SQL程序设计(三)--Package的优点
[Oracle]高效的PL/SQL程序设计(四)--批量处理
[Oracle]高效的PL/SQL程序设计(五)--调用存储过程返回结果集
[Oracle]高效的PL/SQL程序设计(六)- ......
SQL*PLus> desc emp;
名称 &nbs ......
1、在oracle的sys-sysdba下登陆
写一个java source程序链接sqlserver2005:
create or replace and compile java source named test as
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class excutesql1
{
public static String entry ......