【发布时间】:2012-06-10 14:27:33
【问题描述】:
我有一个 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子句。
使这个查询运行得最快的最佳索引是什么?
我最初认为索引应该在(date, status) 上,但我现在不确定了。由于状态列将大部分包含零,它是否有附加值?仅按(date) 索引就足够了吗?
或者应该是(status, date)?
【问题讨论】:
标签: sql database database-agnostic