postgresql12 b-tree v4空间上和性能上的优化
在 pg v11 和 v12 上 常见测试用例
CREATE TABLE rel ( a bigint NOT NULL, b bigint NOT NULL ); ALTER TABLE rel ADD CONSTRAINT rel_pkey PRIMARY KEY (a, b); CREATE INDEX rel_b_idx ON rel (b); \d rel Table "public.rel" Column | Type | Collation | Nullable | Default--------+--------+-----------+----------+---------a | bigint | | not null | b | bigint | | not null | Indexes: "rel_pkey" PRIMARY KEY, btree (a, b) "rel_b_idx" btree (b)
- 它确保“a”和“b” 两字段的每种组合最多有一个条目。
- 它可以加快与给定“b”相关的所有“a”的搜索速度。
加入测试数据
INSERT INTO rel (a, b) SELECT i, i / 10000 FROM generate_series(1, 20000000) AS i; /* 收集统计信息 */ VACUUM (ANALYZE) rel;
B树索引提高1:插入很多重复的索引和数值
当我们比较的b列索引的大小的第一个区别是显而易见的:
v11: \di+ rel_b_idx List of relations Schema | Name | Type | Owner | Table | Size | Description --------+-------------+-------+----------+-------+--------+------------- public | rel_b_idx |