Heim >Datenbank >MySQL-Tutorial >Kann Postgres gruppenweise MAX-Abfragen ohne einen vollständigen Tabellenscan optimieren?
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!