我有一个 sql 查询,它获取设计为低级队列的表中的前 N 行。
select top N * from my_table where status = 0 order by date asc
此查询背后的意图如下:
- 首先,这个问题与数据库无关,因为我的实现将支持 sql server、oracle、DB2 和 sybase。上面“top N”的sql语法只是一个例子。
- 该表可以包含数百万行。
- 相比之下,N 是一个相对较小的数字,例如 100。
- 当行在队列中时状态为 0。稍后它变为 1 表示它正在处理中。处理后删除。因此,预计表中至少 90% 的行的状态为 0。
- 表中的行应根据其日期获取,因此该
order by
子句。
使此查询最快运行的最佳索引是什么?
我最初认为索引应该是 on (date, status)
,但我不确定了。由于状态列将大部分包含零,它是否有附加值?单独索引就足够了(date)
吗?
或者也许应该是(status, date)
?