データベースに巨大なログテーブルがあります。log_id と log_date にはインデックスがあります。
ログを逆の順序でクエリすると、完了するまでに「永遠に」かかります。注文なしで同じクエリを実行すると、答えはすぐにわかります。
どうすればテーブルを調整したり、クエリを改善して、より迅速な (より) 逆選択を行うことができますか?
編集:クエリ(申し訳ありませんが、クエリは私の頭の中で明白でした(そしてFlorinでも!):
select * from logs ordered by log_date desc
いくつかの指標:
テーブルには約 4,000 万行あります
select * from logs where log_id < 500
--> 0.032 秒で取得
select * from logs where log_id < 500 order by log_time desc;
--> 約 20 秒で取得
$max は最大 log_id であり、別のクエリで取得されています
select * from logs where log_id > ($max - 500);
--> 約 16 秒で取得
select * from logs where log_id > ($max - 500) order by log_time desc;
--> 約 16 秒で取得
私の質問は、実行に時間がかかりすぎるすべてのクエリを改善する方法です。
@Florin
「where」句を使用してログを絞り込むと、(where log_time >= truncate(sysdate))
パフォーマンスは良好ですが、長期間または過去の範囲のログを選択できる必要があります。この場合、クエリはまだかなり遅いです (20 秒など)。