APEX ページにレポートがあり、10,000 ~ 1,000,000 (1M) レコードの範囲の結果 (行数) を含む複数の列があります。
私が持っている条件句があり、表示される結果を決定または制限するためにページアイテムの値を使用します...次のようになります。
SELECT
...
FROM ...
WHERE ...
AND (:P2_STARTDATE IS NULL OR TO_DATE(:P2_STARTDATE, 'DD-MON-YYYY HH24:MI:SS') < creation_date)
ページアイテムの値を入力するといつでもP2_STARTDATE
比較が行われると思いますが、ページアイテムに値を入力しないとNULL
、ブール演算は評価に対してTRUEを返すはずP2_STARTDATE IS NULL
です.. .
このクエリでは、0.5M 行を検索するときに実行時間が 45 秒以上かかりますが、これは許容できません。私の理論をテストするために、次の変更を書きました。
SELECT
...
FROM ...
WHERE deleted_flag = 'N'
AND (:P2_STARTDATE IS NULL) -- comment the rest of the evaluation....
すぐに NULL と評価され、約 1 秒で同じ結果セット 0.5M+ が返されます。値を設定すると、結果セットは明らかに空になります。
問題は、Oracle APEX がその式を TRUE に迅速に評価するようにするにはどうすればよいかということです。ヒント、回避策、または解決策を提供していただきありがとうございます。