1

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 子句..?

4

1 回答 1

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 查询。

于 2012-12-17T19:45:35.867 回答