SELECT *
  FROM (SELECT A.*, ROWNUM RN
          FROM (select *
                  from v_ywb_sqxx a
                 where a.ywbh in (select ywbh
                                    from G14_xx b
                                   where b.org = 'BDI'
                                     and b.qfrq = '201301'
                                     and b.t_bs = '1')) A
         WHERE ROWNUM <= 30)
 WHERE RN >= 1G14_xx 没有索引  v_ywb_sqxx 是个试图,每个表有索引

解决方案 »

  1.   

    用explain plan for的方式。
      

  2.   

    最外层没啥意义吧?试一试去掉:
    SELECT A.*, ROWNUM RN
    FROM (select *
          from v_ywb_sqxx a
          where a.ywbh in (select ywbh
                           from G14_xx b
                           where b.org = 'BDI'
                           and b.qfrq = '201301'
                           and b.t_bs = '1')) A
    WHERE ROWNUM <= 30
      

  3.   

    观察一下,是否有必要在b.org  ,b.qfrq   ,b.t_bs 字段上加索引
      

  4.   

     in换成exist 试试 呗
      

  5.   

    楼主抛一条sql就让人给你tuning?
    建议先看看版主Dave :提问的智慧 http://bbs.csdn.net/topics/340214440摘入如下:5. SQL 相关的内容
        SQL 的问题,基本语法有关系,而且它报错也很明显,可以直接google或者查看在线文档。 如果还是不能解决,在发帖的时候,请把相关的表结构和测试数据的创建SQL,index情况,Table的record数,table是否analyze等信息一并贴出来。 这样也方便大家一起查看。    还有对于SQL 性能的,最好一并贴上执行计划。 这样一看也就明了。 
        可以在sqlplus 开启autotrace, 在执行命令后也能看到相关的执行计划:
    SQL>set autot on;
        或者通过如下SQL 语句:
    (1)SQL>EXPLAIN PLAN FOR 你的sql语句;
                 如 SQL>EXPLAIN PLAN FOR SELECT * FROM EMP WHERE EMPNO=7369;
           (2)SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));