where子句中使用的PLSQL函数 - 性能问题
问题描述:
我有一个查询对于有限数量的ROWNUMS表现很好,但是一旦它超过了这个特定的ROWNUM,它就表现得非常悲惨。where子句中使用的PLSQL函数 - 性能问题
下面是查询:
SELECT p.col1,pv.col1 FROM tab1 p, tab2 tv, tab3 pv WHERE myFunc(pv.col1) = 1 AND tv.col1 = pv.col1 AND p.col1 = tv.col2 AND ROWNUM < 4500
所有这些表都具有巨大的纪录(超过百万)。
上述查询以非常好的速度执行。
如果ROWNUM < 5000或更多,则需要相当长的时间。
有什么办法可以提高上述查询的性能吗?
答
检查是否有对每个连接上的每个表中的列,并在这之后,你可以使用函数索引的索引,例如参见:http://techonthenet.com/oracle/indexes.php
+0
对于基于函数的索引 – 2010-11-14 14:50:47
您已加入索引的所有三个表列? – diederikh 2010-11-14 09:05:23
知道'myFunc'的作用会很有帮助。 – 2010-11-14 09:27:18
您应该检查(并添加到您的问题中)EXPLAIN PLAN,用于ROWNUM 2010-11-14 13:05:17