如果您查询日期范围和另一件事,那么将日期列作为索引中的前沿是一件坏事吗?
我正在使用 PostgreSQL,但假设这适用于所有 B 树索引。
假设我查询了创建日期为 2013-01-02 或更晚且状态为活动的记录。我对 B 树索引如何组织日期很模糊,但这就是我的想象。如果索引打开(创建,状态),它的结构大致如下:
created status
------------------------
2013-01-01 Active
2013-01-01 Inactive
2013-01-02 Active <-- This record is selected
2013-01-02 Inactive
2013-01-03 Active <-- This non-adjacent record is selected (SLOW)
2013-01-03 Inactive
如果索引打开(状态,已创建):
status created
------------------------
Active 2013-01-01
Active 2013-01-02 <-- This record is selected
Active 2013-01-03 <-- This adjacent record is selected (FAST)
Inactive 2013-01-01
Inactive 2013-01-02
Inactive 2013-01-03
所以在我看来,如果您使用日期作为前沿并查询这些日期的范围,那么您想要的记录将在索引中分散,导致性能下降。日期时间更糟。