1

WHERE次のような句で関数を呼び出すクエリがあります

SELECT * FROM table_name t WHERE (SELECT xyz_function(t.test) FROM dual) = 'A';

そして、以下の条件に応じて「A」または「B」を返す関数 xyz_function :

SELECT 'A' FROM dual WHERE pTest NOT IN (
                                         a_START_WITH_CONNECT_BY_CLAUSE
                                         MINUS
                                         b_START_WITH_CONNECT_BY_CLAUSE);

pTest関数に渡すパラメーターは次のとおりです。関数で2つの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 に答える