select ename from emp;
select * from (
  select ename from emp
);
请教各位大虾,上面两痛苦语句在执行效率上有多大差距?谢谢!

解决方案 »

  1.   

    从下面的执行计划上看没什么区别,SQL> explain plan for select ename from emp;已解释。SQL> select 
      2  
    SQL> 
    SQL> SELECT plan_table_output 
      2    FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE')); PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
    Plan hash value: 2872589290--------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |    14 |    84 |     3   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS FULL| EMP  |    14 |    84 |     3   (0)| 00:00:01 |
    --------------------------------------------------------------------------已选择8行。SQL> explain plan for select * from (select ename from emp);已解释。SQL> SELECT plan_table_output 
      2    FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE')); PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
    Plan hash value: 2872589290--------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |    14 |    84 |     3   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS FULL| EMP  |    14 |    84 |     3   (0)| 00:00:01 |
    --------------------------------------------------------------------------已选择8行。
      

  2.   

    我的意思是,有较长的一个查询语句sSQL,语句不固定,在程序中,想这样做:
    select * from (
      sSql
    )
    where XXXX='xxxx';
    包面套一层SELECT,对查询效率有多大影响?
      

  3.   

    CSDN还在升级吗?
    为什么回帖这么困难?
      

  4.   

    2楼和3楼,访问CSDN是不是很蜗牛啊,简直没法忍受了。系统升级了,咋这么慢呢。
      

  5.   


    1. 如果内层sql返回的结果集完全可以放在内存里,几乎没什么影响
    2. 如果结果集很大,需要磁盘缓存,那会降低性能的