特定の日付範囲の間の月の日付オブジェクトのコレクションを返すクエリを実行しています。クエリは問題なく動作しますが、非常に遅いです (私のローカル マシンでは約 2 秒、企業の開発環境では約 30 秒)。ここにあります:
SELECT ADD_MONTHS(TO_DATE('200804', 'YYYYMM'), -1+rownum) AS MONTH
FROM all_objects
WHERE ADD_MONTHS(TO_DATE('200804', 'YYYYMM'), -1+rownum) <= TO_DATE('200805', 'YYYYMM')
現在、1 か月しか返されませんが、2 番目の日付文字列を拡張すると、さらに多くの値が返されます。
2 つの質問があります。まず、なぜこれはとても遅いのですか?Oracle 関数がクエリを実際に遅くすることは知っていますが、私の職場の開発マシンでは約 30 秒かかります。
2 つ目の、より不可解な質問: 範囲を「201805」に拡張すると、実行時間が数分の 1 秒に短縮されるのはなぜですか? 範囲が広いほど時間がかかると思います。逆効果のようです。