日期:2014-05-16 浏览次数:20696 次
-- 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处理后,查询速度就特别快了。