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!