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

Nic*_*net 6 database oracle indexing

在大多数具有日期列的表中,我们"通常"会查询最近的信息.

按"降序"对日期列"一般"进行索引是一个好主意吗?

Den*_*rdy 8

不熟悉Oracle的内部,但这是我对Postgres如何工作的理解:

索引是针对所有意图和目的而聚类的.因此,如果您订购了asc并且新行总是添加到它的末尾(例如created_at,updated_at,billed_at等),您的新行将被追加(或几乎如此)而不是前置(导致磁盘页面)拆分).这更快.

您的查询计划程序将很乐意以相反的顺序读取索引.因此,如果它是单个列索​​引,则可以使用 - 在使用案例中如何插入新行时使用最自然的.

如果以相反顺序排序的索引可能会变得有趣,那么当您有多列索引时.比如说,(id, created_at desc)在审计日志表中.这实际上是一个不好的例子,但重要的是:如果您按顺序排序id, created_at desc,索引将按原样使用.

  • 与Oracle几乎相同.它可以按降序读取索引,当将多列索引与同一多列顺序匹配时,ASC/DESC最有意义 (4认同)

Jon*_*ler 5

除非您看到显着的性能改进,否则您可能希望避免降序索引。降序索引实际上是基于函数的索引,并且有一些限制。

例如,根据SQL Reference,唯一降序索引不允许多个 null,并且在分析索引和表之前不会使用降序索引。(尽管我无法重现第二个限制。)

此外,基于函数的索引有点不同,并且往往会破坏每个人编写的索引维护脚本。这并不是避免它们的好理由,只是需要注意的事情。