鉴于:
postgres=# create table testing(a int primary key, b int not null);
CREATE TABLE
postgres=# create index on testing (b) where b = 0;
CREATE INDEX
postgres=# \d testing
Table "public.testing"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
a | integer | | not null |
b | integer | | not null |
Indexes:
"testing_pkey" PRIMARY KEY, btree (a)
"testing_b_idx" btree (b) WHERE b = 0
当在!=INSERT
处添加新行时,我是否需要支付更新索引的惩罚?b
0
理想情况下,我想加速值为b
=的查询,而不会增加在!=1
处插入新行的延迟。b
0
如果你插入一行,其中的
b
值不为0,那么索引testing_b_idx
将不会被修改,而且你也不必为修改索引付出代价。准确地说,有一个很小的开销,因为必须检查是否
b
为 0。但这个开销可能无法衡量。