我的数据库表有一个主键和一些整数列,以及一个布尔值列,称为“暂停”,不在主键中。该表只能容纳几百行,但我需要非常定期地查询布尔列。我需要知道布尔暂停列中是否有任何一行为真,如果有一行为真,如果所有为假,我都将返回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)
);
答案 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
这将利用过滤后的查询,并且应该很快。