低レベルのキューとして設計されたテーブルの最初の N 行をフェッチする SQL クエリがあります。
select top N * from my_table where status = 0 order by date asc
このクエリの背後にある意図は次のとおりです。
- まず、この質問はデータベースに依存しないことを意図しています。私の実装では、SQL Server、Oracle、DB2、および sybase がサポートされるためです。上記の "top N" の SQL 構文は単なる例です。
- テーブルには数百万行を含めることができます。
- N は比較的小さい数値で、たとえば 100 です。
- 行がキューにある場合、status は 0 です。その後、処理中であることを示すために 1 に変更されます。処理後、削除します。そのため、テーブル内の行の少なくとも 90% がステータス 0 になることが予想されます。
- テーブル内の行は、日付に従ってフェッチする必要があるため、
order by
句です。
このクエリを最速で動作させるための最適なインデックスは何ですか?
最初はインデックスが にあるはずだと思っていました(date, status)
が、もうよくわかりません。ステータス列にはほとんどゼロが含まれるため、それに付加価値はありますか? 単独で索引付けするだけで十分(date)
ですか?
それともそうあるべき(status, date)
ですか?