我正在使用postgresql。我的表有列name, date
。假设两列都是非唯一的。为了能够基于between
两个日期检索行,我可以做哪些优化类型(就索引而言)?
我知道唯一索引通过创建一种树状结构来使访问更容易(log n
?),从而使检索更快。但是应该创建什么样的索引来加快范围查询呢?甚至可能吗?
我正在使用postgresql。我的表有列name, date
。假设两列都是非唯一的。为了能够基于between
两个日期检索行,我可以做哪些优化类型(就索引而言)?
我知道唯一索引通过创建一种树状结构来使访问更容易(log n
?),从而使检索更快。但是应该创建什么样的索引来加快范围查询呢?甚至可能吗?
B树索引能够加速范围查询。它是使用 simple 创建索引时的默认类型
CREATE INDEX
。https://www.postgresql.org/docs/14/indexes-types.html
您可以通过以下示例进行检查:
这是
select ...
语句的 EXPLAIN 输出:如您所见,您的范围条件在
Index Cond
. 但是您应该知道,[Bitmap] Index Scan
如果范围太宽,Postgresql 计划程序将不会选择(因为它比顺序读取所有数据的成本更高)。