以下のクエリを最適化できますか?
select
max(date), sysdate - max(date)
from
table;
クエリ実行時間 ~5.7 秒
別のアプローチがあります
select
date, sysdate - date
from
(select * from table order by date desc)
where
rownum = 1;
クエリ実行 ~7.9 秒
この特定のケースでは、テーブルには約 17,000,000 のエントリがあります。
これを書き直すより最適な方法はありますか?
更新: データベース開発で何人かが提案したヒントを試してみましたが、元のサブセット (約 1,000,000 レコード) よりも小さいサブセットでした。インデックスがない場合、クエリはインデックスがある場合よりも遅くなります。
最初のクエリ、インデックスなし: ~0.56 秒、インデックスあり: ~0.2 秒。インデックスなしの 2 番目のクエリ: ~0.41 秒、インデックスあり: ~0.005 秒。(これは私を驚かせました。最初のクエリは 2 番目のクエリよりも速く実行されると思いました。おそらく、より小さなレコード セットに適していると思います)。
私は DBA にこのソリューションを提案しました。DBA はこれに対応するようにテーブル構造を変更し、実際のデータでテストします。ありがとう