首页 >数据库 >mysql教程 >Postgres 可以在不进行全表扫描的情况下优化 Groupwise MAX 查询吗?

Postgres 可以在不进行全表扫描的情况下优化 Groupwise MAX 查询吗?

Linda Hamilton
Linda Hamilton原创
2025-01-02 12:38:39386浏览

Can Postgres Optimize Groupwise MAX Queries Without a Full Table Scan?

Postgres 可以在不扫描所有行的情况下优化分组最大查询吗?

Postgres 缺乏一种直接的方法来有效地最大化组查询,从在给定的情况下观察到昂贵的全表扫描

解决方案

为了避免过度扫描,请考虑使用选项查找表并通过 option_id 将其链接到记录表。在这些表之间建立外键约束将保持引用完整性。

SQL FOR LOOKUP TABLE CREATION:

CREATE TABLE options (
  option_id int PRIMARY KEY
, option    text UNIQUE NOT NULL
);

从现有记录表插入数据:

INSERT INTO options
SELECT DISTINCT option_id, 'option' || option_id
FROM   records;

优化使用子查询查询:

SELECT option_id, (SELECT max(id)
                   FROM   records
                   WHERE  option_id = o.option_id) AS max_id
FROM   options o
ORDER  BY 1;

或者,优化子查询可以检索最大 id:

SELECT option_id, (SELECT id
                   FROM   records
                   WHERE  option_id = o.option_id
                   ORDER  BY id DESC NULLS LAST
                   LIMIT  1) AS max_id
FROM   options o
ORDER  BY 1;

查询性能的最佳索引:

CREATE INDEX ON records (option_id, id DESC NULLS LAST);

这种优化方法通过利用索引扫描甚至对查找表和主表进​​行仅索引扫描,与全表扫描相比具有卓越的性能。

以上是Postgres 可以在不进行全表扫描的情况下优化 Groupwise MAX 查询吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn