如何在PostgreSQL 11中创建索引以加速包含ORDER BY
的特定查询?
我有一个查询需要从包含2M条记录的表中获取前100条记录,同时还有一些常见的过滤条件,例如:
SELECT id, first_name, last_name
FROM users
WHERE active = true AND region IN (1,2,3)
ORDER BY last_active_timestamp DESC;
没有
ORDER BY
子句时,它几乎瞬间返回,大约需要1秒钟。但是,有了这个子句,它会花费长达5分钟的时间,令人痛苦。因此,我尝试创建一个部分索引,如下所示:
CREATE INDEX CONCURRENTLY my_user_index ON users (active, region, last_active_timestamp DESC NULLS LAST)
WHERE region IN (1, 2, 3) AND active = True;
但是那几乎没有效果。以上查询仍然需要数分钟的时间。这是Postgres中ORDER BY
的限制,还是我可以使用不同类型的索引来加速它?
EXPLAIN
吗? - undefinedlast_active_timestamp
列在索引上创建索引。region
和active
保持在where
子句中。 - undefinedCREATE INDEX CONCURRENTLY my_user_index ON users (last_active_timestamp DESC NULLS LAST)
。 - undefined