这样的SQL 还能优化吗?
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 >= 1
G14_xx 没有索引 v_ywb_sqxx 是个试图,每个表有索引
[解决办法]
执行计划、发出来
[解决办法]
用explain plan for的方式。
[解决办法]
最外层没啥意义吧?试一试去掉:
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
[解决办法]
观察一下,是否有必要在b.org ,b.qfrq ,b.t_bs 字段上加索引
[解决办法]
in换成exist 试试 呗
[解决办法]
楼主抛一条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'));
