postgresql - 如何在布尔列上创建索引
问题描述
我的数据库表有一个主键和许多整数列以及一个名为 paused 的布尔列,它不在主键中。该表只能容纳几百行,但我需要非常定期地查询布尔列。我需要知道布尔暂停列中的任何行是否为真,如果有一行为真,我将返回真,如果全部为假,我将返回假。
我应该在布尔列上创建一个索引吗?该语法是什么样的,或者是否有任何其他方法可以优化该查询?
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)
);
解决方案
支持以下查询:
SELECT paused
from pause_metrics
where paused
limit 1;
过滤索引将是最有效的方法:
create index idx_paused on pause_metrics(paused)
where paused;
索引中的实际列并不重要,重要的部分是where paused
它只索引具有paused = true
.
要确定是否所有行都有paused = false
,可以使用存在查询:
select not exists (SELECT 1 from pause_metrics where paused limit 1) as all_active
这将利用过滤后的查询,并且应该很快。
推荐阅读
- panel - CAPL PutValuetoControl
- javascript - 如何在html表列的编辑更改事件中编写代码
- flutter - 如何从 JSON 获取可变数据
- python - 你如何让它运行直到 y 达到 20
- huawei-mobile-services - 我们是否有任何机制可以在一次通话中向所有订阅者发送通知?
- android - 颤振计算错误
- excel - 用于数据输入的excel vba编码
- sql - 插入具有唯一标识符的行
- dataframe - 如何在 julia 的 DataFrames 上应用 Cuda.jl
- python - 仅当变量不为空时,Django 过滤查询集