日期:2014-05-16  浏览次数:20696 次

oracle 语句 优化 !!!!
select a.* from talbe1 a
  where instr(a.col1,(select b.col2 from b,c where b.recno = c.brecno and b.col4= 'R23' and rownum < 2 ) > 0 )


该语句怎么样利建立索引来优化,或者别的办法?,(主要是table1表的查询优化(怎样用上索引?) )

------解决方案--------------------
SQL code
-- Just FYI:
SELECT *
  FROM TALBEL A
 WHERE EXISTS
 (SELECT 1
          FROM b
         WHERE EXISTS (SELECT 1 FROM B.RECNO = C.BRECNO AND B.COL4 = 'R23')
           AND INSTR(A.COL1, B.COL2) > 0);

------解决方案--------------------
加上索引注释 /*+index(TABLE INDEX_NAME)*/ 查询下适合快速查询的索引,强制索引,看下效果怎么样!
------解决方案--------------------
exists之类的关键字的适用性也是有要求的,理论上应该是一个数据集大的和一个数据集小的,也就是业务数据表和字典表之间来使用。两端都是业务数据表的条件下效率本身就不会高。
而且你还用了一些oracle的内置函数,那就效率就更难说了,不要认为oracle自己提供的内置函数就一切Ok,根本不是这样的,函数的运行本身也是需要资源和转换时间的。我就遇到过多表关联查询时,where子句中to_char转换date型字段为字符串,然后跟参数比对的情况,数据量超过60万(我遇到的),查询速度就突然变慢。将对字段的to_char去掉,修改为对参数的to_date处理后,查询速度就特别快了。