在 postgres 中,我正在对 2 列进行查询
type
只有 3 个可能值的字符串- 时间戳
the_timestamp
查询是
select id from my_table where type = 'a-value' and the_timestamp < '2024-03-01'
- 此查询的索引的最佳排序是什么?我相信这些建议是相互冲突的
- 首先是平等,其次是范围
- “最高基数优先”(仅用于匹配,而不是范围?)
- 如果 the_timestamp 上的索引是
desc
orasc
,会有很大区别吗?还是只有在使用范围查询遍历多个列时才会有区别……或者执行BETWEEN
类似的操作?
“最高基数”对于不平等来说没有多大意义。除非范围总是非常窄,否则它对于范围可能也没有多大意义。
该查询的最佳排序很明显
(type, the_timestamp)
。您可能希望在末尾包含“id”,以便获得仅索引扫描。但是,列的相反顺序对于此查询来说可能“足够好”,而对于未指定类型的查询则更有用。因此,如果您不想为每个查询都有一个索引,那么(the_timestamp, type)
整体上可能会更好。ASC 和 DESC 重要的地方是如果您想支持类似
ORDER BY A DESC, B ASC
. 否则,这并不重要,因为 PostgreSQL 知道如何向前或向后读取索引