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

时间:2011-06-20 18:56:39

标签: database oracle indexing

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

按“降序”按顺序索引日期列是不是一个好主意?

2 个答案:

答案 0 :(得分:8)

不熟悉Oracle的内部结构,但这是我对Postgres的工作原理的理解:

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

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

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

答案 1 :(得分:4)

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

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

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