我创建了以下多列索引
CREATE INDEX ON message_log (website, in_use, insert_timestamp);
但是,当我执行以下查询时,它似乎没有使用该查询,因为它需要很长时间才能完成。
select id from message_log where website = 'forgezilla' AND in_use = false ORDER BY insert_timestamp NULLS FIRST;
多列索引可以用于排序吗?如果是这样,我在创建索引时是否创建了错误的排序?
不,您给定的索引不能用于 ORDER BY。你可以通过执行
set enable_sort=off
然后解释查询来看到这一点,无论如何你都会得到一个排序,因为这是 PostgreSQL 完成工作的唯一方法。但是,如果您创建正确的索引:
然后它将用于 ORDER BY。