Optimisation de la requête maximale Groupwise
La requête fournie, visant à récupérer les enregistrements avec un maximum d'ID regroupés par option_id, est confrontée à des problèmes de performances en raison de l'analyse de tous rangées. Pour résoudre ce problème, envisagez d'utiliser un index programmatique qui stocke les valeurs d'ID maximales pour chaque option_id. Cette approche permet une récupération efficace des maximums en analysant uniquement l'index.
Les approches traditionnelles, telles que l'indexation (option_id, id) ou (option_id, id DESC), n'optimisent pas correctement la requête.
Optimisation de MySQL
MySQL 5.5 intègre une optimisation avancée pour cela requête. En indexant (option_id, id), MySQL exploite l'index pour les opérations de regroupement, évitant ainsi le besoin d'analyses séquentielles.
Optimisation Postgres avec table de référence
Dans Postgres , créez une table de référence, des options, avec des options_ids uniques qui correspondent à des option_ids distincts dans les enregistrements table.
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;
Utilisez une sous-requête corrélée pour récupérer le maximum d'ID des enregistrements pour chaque option_id :
SELECT option_id, (SELECT MAX(id) FROM records WHERE option_id = o.option_id) AS max_id FROM options o ORDER BY 1;
Cette approche permet des analyses d'index uniquement, minimisant ainsi l'accès aux lignes dans les enregistrements. L'index idéal pour cette requête :
CREATE INDEX ON records (option_id, id DESC NULLS LAST);
Optimisation Postgres avec jointure LATERAL (Postgres 9.3)
Alternativement, dans Postgres 9.3 et supérieur, utilisez une jointure LATERAL pour réaliser une optimisation similaire :
SELECT * FROM records LATERAL ( SELECT MAX(id) OVER (PARTITION BY option_id) AS max_id FROM records ) AS m WHERE records.id = m.max_id;
Cette approche exploite également analyses d'index uniquement pour une exécution efficace des requê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!