【发布时间】:2020-06-05 02:51:55
【问题描述】:
问题实际上是关于 sql 查询的优化。假设我们有这样定义的表。
CREATE TYPE record_type AS ENUM (
'TRANSFER',
'TRADE',
'VOUCHER'
);
CREATE TYPE record_status AS ENUM (
'NEW',
'VALIDATED',
'EXPIRED'
);
CREATE TABLE good_records (
id uuid PRIMARY KEY,
user_id uuid NOT NULL,
type record_type NOT NULL,
status record_status NOT NULL,
amount numeric(36,18) NOT NULL DEFAULT 0,
expired_at timestamp WITH TIME ZONE NOT NULL,
notification_sent boolean DEFAULT false,
);
我想每 10 分钟运行一次过期检查,即运行 SELECT * FROM good_records
where record_status = 'NEW' and notification_sent = false(和 SELECT * FROM good_records where record_status = 'VALIDATED' and notification_sent = false)。但是当我监控 db 资源使用情况时,毫不奇怪,这两个查询的成本很高。
我的问题是是否可以以某种方式将索引放在表上,以便我可以加快查询并节省数据库资源。
我已经简要阅读了 postgresql 文档,但没有好的解决方案。
【问题讨论】:
-
为了性能优化,请始终从您的 Postgres 版本开始。这里也很重要:这些枚举值的基数和数据库活动的粗略特征。每个时间单位写入多少次?并且:您真的需要
SELECT *,还是有限的列列表足够好?那里有任何索引吗?
标签: sql postgresql indexing postgresql-performance