【发布时间】:2021-08-10 11:46:53
【问题描述】:
我有一张和这张类似的桌子:
create table request_journal
(
id bigint,
request_body text,
request_date timestamp,
user_id bigint,
);
它用于请求记录目的,因此预计会频繁插入(2k+ rps)。 我想在 request_date 和 user_id 列上创建复合索引,以加快执行这样的选择查询:
select *
from request_journal
where request_date between '2021-07-08 10:00:00' and '2021-07-08 16:00:00'
and user_id = 123
order by request_date desc;
我使用 (request_date desc, user_id) btree 索引和 (user_id, request_date desc) btree 索引测试了选择查询。使用 request_date 前导列索引选择查询的执行速度大约快 10%,但一般来说,任何此类索引的性能都是可以接受的。
所以我的问题是索引列顺序会影响插入时间吗?我没有发现在插入查询中使用 EXPLAIN/EXPLAIN ANALYZE 的任何差异。在“高负载”下,哪个索引的构建时间效率更高?
【问题讨论】:
-
我无法回答您关于 INSERT 性能的问题,但您应该使用 multicolumn index 中最左侧位置最具选择性的列。在您的情况下,这肯定是
request_date列。 -
我很确定两个索引之间的 INSERT 时间不会有任何可测量的差异(假设您只保留其中一个)。一种加快插入速度的方法可能是按月或按年分区。