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

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

Linda Hamilton
发布: 2025-01-02 12:38:39
原创
378 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板