如何在布尔列上创建索引

时间:2019-02-15 09:30:08

标签: postgresql

我的数据库表有一个主键和一些整数列,以及一个布尔值列,称为“暂停”,不在主键中。该表只能容纳几百行,但我需要非常定期地查询布尔列。我需要知道布尔暂停列中是否有任何一行为真,如果有一行为真,如果所有为假,我都将返回true。

我应该在布尔列上创建一个索引,该语法是什么样的,还是有其他方法可以优化该查询?

CREATE TABLE IF NOT EXISTS pause_metrics (
    consumer TEXT NOT NULL,
    timstamp TIMESTAMP NOT NULL,
    idle_counter INTEGER NOT NULL,
    paused BOOLEAN DEFAULT FALSE NOT NULL,
    PRIMARY KEY(consumer)
);

1 个答案:

答案 0 :(得分:3)

要支持以下查询:

SELECT paused 
from pause_metrics
where paused  
limit 1;

过滤索引将是最有效的方法:

create index idx_paused on pause_metrics(paused)
where paused;

索引中的实际列 in 并不重要,重要的部分是where paused,它仅索引具有paused = true的行。

要确定所有行是否都有paused = false,可以使用一个存在的查询:

select not exists (SELECT 1 from pause_metrics where paused limit 1) as all_active

这将利用过滤后的查询,并且应该很快。