B-tree 索引
PostgreSQL 中的 B-tree 索引是什么?
B-tree 是 PostgreSQL 的默认索引类型。它支持对可排序数据进行等值和范围比较,并能直接按顺序返回行。
B-tree 索引在一棵平衡树中按顺序保存键。除非指定其他类型,CREATE INDEX 都会创建 B-tree 索引,PostgreSQL 也使用 B-tree 来实现主键和唯一约束。
规划器可以将 B-tree 用于 <、<=、=、>= 和 > 比较,用于 BETWEEN 和 IN,以及 IS NULL 和 IS NOT NULL。它还能按索引顺序返回行,从而可能省去 ORDER BY 所需的单独排序。每个索引都会加快某些读取,同时给每次写入增加额外工作,因此只为查询实际用来过滤或排序的列建立索引。
示例
该示例为一个时间戳列建立索引,并让 EXPLAIN 分析查询最近一小时数据的语句。输出显示 Index Scan using logs_created_at_idx。
CREATE TABLE logs (
id bigint GENERATED ALWAYS AS IDENTITY,
created_at timestamptz NOT NULL
);
INSERT INTO logs (created_at)
SELECT now() - g * interval '1 minute' FROM generate_series(1, 100000) AS g;
CREATE INDEX logs_created_at_idx ON logs (created_at);
ANALYZE logs;
EXPLAIN SELECT * FROM logs WHERE created_at > now() - interval '1 hour';适用于原生 PostgreSQL 16 或 17 的纯 SQL,无需任何扩展。请在一个可随时丢弃的空数据库中运行。
参考资料
PostgreSQL 官方文档(英文)。