首頁 > 資料庫 > mysql教程 > Postgres 可以在不進行全表掃描的情況下最佳化 Groupwise MAX 查詢嗎?

Postgres 可以在不進行全表掃描的情況下最佳化 Groupwise MAX 查詢嗎?

Linda Hamilton
發布: 2025-01-02 12:38:39
原創
377 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板