Maison >base de données >tutoriel mysql >Postgres peut-il optimiser les requêtes Groupwise MAX sans une analyse complète de la table ?

Postgres peut-il optimiser les requêtes Groupwise MAX sans une analyse complète de la table ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-02 12:38:39403parcourir

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

Postgres peut-il optimiser le nombre maximum de requêtes de groupe sans analyser toutes les lignes ?

Postgres ne dispose pas d'une approche directe pour maximiser efficacement les requêtes de groupe, comme le montre le analyses de table complètes coûteuses observées dans les données données requête.

SOLUTION

Pour éviter des analyses excessives, envisagez d'utiliser une table de recherche pour les options et de la lier à la table des enregistrements via option_id. L'établissement d'une contrainte de clé étrangère entre ces tables permettrait de maintenir l'intégrité référentielle.

SQL POUR LA CRÉATION DE TABLE DE RECHERCHE :

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

Insertion de données à partir d'une table d'enregistrements existants :

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

Requête optimisée utilisant Sous-requête :

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

Alternativement, une sous-requête optimisée peut récupérer l'identifiant maximum :

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;

Indice optimal pour les performances des requêtes :

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

Cette approche optimisée améliore considérablement l'exécution des requêtes en utilisant des analyses d'index ou même des analyses d'index uniquement pour la table de recherche et la table principale, ce qui entraîne des performances supérieures par rapport aux analyses de table complètes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn