通常情况下,当我将一个列设置为非空时,如果它没有索引,我会先添加索引,这样PostgreSQL在进行表扫描并锁定表时可以(希望能够)使用索引,从而使表的锁定时间缩短。 我想要将多个列设置为非空,如下所示:
alter table foos
alter column bar1 set not null
alter column bar2 set not null
alter column bar3 set not null
alter column bar4 set not null;
如果我为这些列创建一个多列索引,那么在进行此更改之前,Postgres会在扫描被锁定的表时使用它吗?
CREATE INDEX CONCURRENTLY my_index on foos (bar1, bar2, bar3, bar4);
如果我在IS NULL(或者IS NOT NULL)上创建一个部分索引,会有什么影响呢?
CREATE INDEX CONCURRENTLY my_index on foos (bar1, bar2, bar3, bar4) where bar1 is null and bar2 is null and bar3 is null and bar4 is null;