我有一个在WHERE
子句中调用函数的查询,如
SELECT * FROM table_name t WHERE (SELECT xyz_function(t.test) FROM dual) = 'A';
函数xyz_function根据以下条件返回'A'或'B':
SELECT 'A' FROM dual WHERE pTest NOT IN (
a_START_WITH_CONNECT_BY_CLAUSE
MINUS
b_START_WITH_CONNECT_BY_CLAUSE);
这里pTest
是我传递给函数的参数。
我在函数中使用了两个START WITH.. CONNECT BY PRIOR
子句。
由于在WHERE子句中调用了该函数,所以对所有t.test执行它。
该查询提供了近20K的记录,因此超时。
由于函数中的START WITH.. CONNECT BY
子句,查询似乎超时了。
任何人都可以帮我删除START WITH .. CONNECT WITH子句吗??
答案 0 :(得分:2)
会...
SELECT
*
FROM
table_name t
WHERE
t.test NOT IN
(
a_START_WITH_CONNECT_BY_CLAUSE
MINUS
b_START_WITH_CONNECT_BY_CLAUSE
);
...相当于你目前的情况?如果没有看到你的表,函数和CONNECT BY子句的样子,很难说。但是,如果它是等效的,则可能会获得更好的性能,因为可能不需要在每一行上评估MINUS查询。