在大多数具有日期列的表格中,我们“通常会”查询最近的信息。
按“降序”按顺序索引日期列是不是一个好主意?
答案 0 :(得分:8)
不熟悉Oracle的内部结构,但这是我对Postgres的工作原理的理解:
为所有意图和目的聚集索引。因此,如果您订购了asc并且新行总是添加到它的末尾(例如created_at,updated_at,billed_at等),您的新行将被追加(或几乎如此)而不是前置(导致磁盘页面)拆分)。这更快。
您的查询计划程序将很乐意以相反的顺序读取索引。因此,如果它是单个列索引,则可以使用 - 在使用案例中如何插入新行时使用最自然的。
如果以相反顺序排序的索引可能会变得有趣,那么当您有多列索引时。比如说,(id, created_at desc)
在审计日志表中。这实际上是一个不好的例子,但重点在于:如果您按id, created_at desc
排序,索引将按原样使用。
答案 1 :(得分:4)
除非您看到显着的性能提升,否则可能希望避免降序索引。降序索引实际上是基于函数的索引,并且有一些限制。
例如,根据SQL Reference,唯一的降序索引不允许多个空值,并且在分析索引和表之前不会使用降序索引。 (虽然我无法重现第二个限制。)
此外,基于函数的索引稍有不同,并且倾向于破坏每个人编写的索引维护脚本。这不是一个避免它们的好理由,只是要注意的事情。