Heim >Datenbank >MySQL-Tutorial >Kann Postgres gruppenweise MAX-Abfragen ohne einen vollständigen Tabellenscan optimieren?

Kann Postgres gruppenweise MAX-Abfragen ohne einen vollständigen Tabellenscan optimieren?

Linda Hamilton
Linda HamiltonOriginal
2025-01-02 12:38:39395Durchsuche

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

Kann Postgres gruppenweise maximale Abfragen optimieren, ohne alle Zeilen zu scannen?

Postgres fehlt ein direkter Ansatz, um Gruppenabfragen effizient zu maximieren, wie aus dem hervorgeht kostspielige vollständige Tabellenscans, die in den angegebenen Fällen beobachtet wurden Abfrage.

LÖSUNG

Um übermäßige Scans zu vermeiden, sollten Sie die Verwendung einer Nachschlagetabelle für Optionen in Betracht ziehen und diese über option_id mit der Datensatztabelle verknüpfen. Das Einrichten einer Fremdschlüsseleinschränkung zwischen diesen Tabellen würde die referenzielle Integrität wahren.

SQL FÜR DIE ERSTELLUNG VON LOOKUP-TABELLEN:

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

Dateneinfügung aus der Tabelle mit vorhandenen Datensätzen:

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

Optimierte Abfrageverwendung Unterabfrage:

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

Alternativ kann eine optimierte Unterabfrage die maximale ID abrufen:

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;

Optimaler Index für die Abfrageleistung:

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

Dieser optimierte Ansatz verbessert die Abfrageausführung erheblich, indem Index-Scans oder sogar Nur-Index-Scans für beide Nachschlagetabellen verwendet werden und der Primärtabelle, was zu einer überlegenen Leistung im Vergleich zu vollständigen Tabellenscans führt.

Das obige ist der detaillierte Inhalt vonKann Postgres gruppenweise MAX-Abfragen ohne einen vollständigen Tabellenscan optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn