日期字段上的 Postgres DESC 索引
Posted
技术标签:
【中文标题】日期字段上的 Postgres DESC 索引【英文标题】:Postgres DESC index on date field 【发布时间】:2015-01-05 15:11:36 【问题描述】:我在一个大表上有一个日期字段,我主要按 DESC 顺序查询和排序。我在该字段上有一个默认 ASC 顺序的索引。我读到,如果索引位于单个字段上,那么它是 ASC 还是 DESC 顺序并不重要,因为可以从两个方向读取索引。将索引更改为 DESC 会受益吗?
【问题讨论】:
查看执行计划(使用explain analyze
)就知道了。
您可能在这里读到:由于可以向前或向后扫描有序索引,因此创建单列 DESC 索引通常没有用 - 排序顺序已经可用常规索引。 postgresql.org/docs/current/static/…
【参考方案1】:
操作系统通常在向前方向读取文件的效率更高,因此您可以通过创建DESC
索引来稍微加快速度。
为了大大加快速度,请在上面创建 DESC
索引和 CLUSTER
表。
CLUSTER tablename USING indexname;
在ASC
索引上进行聚类也会带来改进,但会更少。
【讨论】:
我怀疑操作系统的顺序文件处理会以某种方式影响单列索引的速度。毕竟它是作为二进制搜索处理的,无论如何都会进行随机访问。你有关于这个问题的任何文档或资料吗?我会很感兴趣 磁盘驱动器的顺序读取速度更快,任何促进顺序读取的东西都会提高性能。如果表是并且预期的结果集足够大,以至于为查询选择索引扫描,并且查询的读取表的部分主要按顺序执行,这将提高性能。以上是关于日期字段上的 Postgres DESC 索引的主要内容,如果未能解决你的问题,请参考以下文章
Postgres 文本搜索与 GIN 索引并在其他列上排序 DESC