将日期列按降序索引是一个好主意吗?

10
在大多数包含日期列的表中,我们通常会查询最近的信息。
一般来说,将日期列按降序索引是个好主意吗?

2
如果您的查询正在使用索引,那么是个好主意(除非它们使插入操作变慢)。 - user330315
2
@a_horse_with_no_name:你的意思是“这取决于情况,试一下并分析结果”。 - mu is too short
@mu:多多少少是的 ;) - user330315
2个回答

13

虽然不熟悉Oracle的内部机制,但我了解它如何与Postgres配合工作:

索引被聚集在一起以便所有意图。因此,如果它们按升序排序并且新行始终添加到其末尾(例如created_at、updated_at、billed_at等),则新行将被追加(或几乎是)而不是前置插入(导致磁盘页分裂)。这样会更快。

查询规划器可以愉快地反向读取索引。因此,如果它是单列索引,则任何方式都可以--使用最自然的方式来插入新行。

当索引按相反顺序排序时,可能会变得有趣的地方,是当你有一个多列索引时。比如,在审计日志表中使用(id, created_at desc)。这实际上是一个糟糕的例子,但这里的重点是:如果您按id, created_at desc排序,则索引将按原样使用。


4
和Oracle基本相同。它可以按照降序读取索引,当将多列索引与相同的多列排序方式匹配时,ASC/DESC是最有意义的。 - Gary Myers

5
除非您看到了显著的性能提升,否则您可能希望避免使用降序索引。降序索引实际上是基于函数的索引,并具有一些限制。
例如,根据SQL参考,唯一的降序索引不允许多个空值,并且在分析索引和表之前不使用降序索引。(虽然我无法重现第二个限制。)
此外,基于函数的索引略有不同,并且往往会破坏每个人编写的索引维护脚本。这不是避免它们的好理由,只是需要注意的事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接