where子句中使用的PLSQL函数 - 性能问题

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或更多,则需要相当长的时间。

有什么办法可以提高上述查询的性能吗?

+0

您已加入索引的所有三个表列? – diederikh 2010-11-14 09:05:23

+0

知道'myFunc'的作用会很有帮助。 – 2010-11-14 09:27:18

+0

您应该检查(并添加到您的问题中)EXPLAIN PLAN,用于ROWNUM 2010-11-14 13:05:17

检查是否有对每个连接上的每个表中的列,并在这之后,你可以使用函数索引的索引,例如参见:http://techonthenet.com/oracle/indexes.php

+0

对于基于函数的索引 – 2010-11-14 14:50:47