4

以下のクエリを最適化できますか?

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 はこれに対応するようにテーブル構造を変更し、実際のデータでテストします。ありがとう

4

2 に答える 2

3

日付列にインデックスはありますか?

于 2012-07-27T15:45:49.943 に答える
1

このクエリは非常に単純であるため、日付列にインデックスを追加する以外に、最適化するためにできることはほとんどありません。これは何のデータベースですか?sysdate はテーブルの別の列ですか?

于 2012-07-27T15:47:44.157 に答える