Postgresql
Postgres 12:表 PARTITION BY (A) 上的 PRIMARY KEY(A, B) 和 PRIMARY KEY (B, A) 之間是否存在性能差異?
給定一個表這個表:
CREATE TABLE tbl ( a int not null, b int not null, created timestamp not null default now(), primary key(a, b) ) PARTITION BY LIST(a)
用於查找列的查詢計劃
a
如下b
所示:EXPLAIN ANALYZE SELECT EXISTS(SELECT * FROM tbl WHERE a = 1 AND b = 1) Result (cost=2.37..2.38 rows=1 width=1) (actual time=0.013..0.013 rows=1 loops=1) InitPlan 1 (returns $0) -> Index Only Scan using pkey on partition (cost=0.15..2.37 rows=1 width=0) (actual time=0.012..0.012 rows=0 loops=1) Index Cond: ((a = 1) AND (b = 1)) Heap Fetches: 0 Planning Time: 0.860 ms Execution Time: 0.033 ms
我想知道是否以反向列順序定義主
PRIMARY KEY (b, a) ) PARTITION BY LIST (a)
鍵a
(在。
不,那不會有任何區別;
=
如果兩個列都在條件中進行比較,則索引中列的順序無關緊要WHERE
(當然只有AND
在條件之間存在時)。索引將同時使用兩列掃描,重要的是匹配條件的索引條目的數量,這在兩種情況下都是相同的:
a | b b | a -----+----- -----+----- 1 | -1 -1 | 1 1 | 1 <--- -1 | 2 1 | 1 <--- 1 | 1 1 | 2 1 | 1 <--- 2 | -1 1 | 2 <--- 2 | 1 2 | 1 2 | 3 2 | 3 index on (a,b) index on (b,a)