非常に長い時間(15〜30秒)かかる(クエリ1)(オラクルで)このクエリがあります:
SELECT numcen
FROM centros
WHERE TO_NUMBER (centros.numcen) = TO_NUMBER (?)
OR TO_NUMBER (centros.numcen) IN (
SELECT TO_NUMBER (dc.centro)
FROM datos_centro dc, centros c
WHERE TO_NUMBER (c.numcen) = TO_NUMBER (dc.centro)
AND TO_NUMBER (dc.centro_superior) = TO_NUMBER (?));
非常に単純なクエリなので、理由はわかりません。内部のサブクエリが原因だと思っていましたがIN
、そのようなサブクエリ(query2)を実行すると:
SELECT TO_NUMBER (dc.centro)
FROM datos_centro dc, centros c
WHERE TO_NUMBER (c.numcen) = TO_NUMBER (dc.centro)
AND TO_NUMBER (dc.centro_superior) = TO_NUMBER (?)
100 ~ 200ms しかかかりません。さらに、query2を実行し、その結果をquery1IN
の中に入れてサブクエリを置き換えると、結果はすぐに得られます。
権限がないため、Explain Plan を実行できません。mysql で実行するとさらに悪化します ( に置き換えTO_NUMBER
ますCAST
)。2分以上かかりますが、これは容認できません。
では、最初のクエリ ( query1 ) を改善する方法はありますか? 二つに分けるべきですか?(はるかに高速です)で置き換えOR
た場合、同じクエリになりますか?UNION
どんなアドバイスでも大歓迎です。私の英語に感謝し、申し訳ありません。