Sélectionner efficacement une ligne de chaque groupe
Dans une grande table de produits contenant des millions d'enregistrements, l'optimisation des requêtes est cruciale pour les performances. Un scénario courant consiste à récupérer une seule ligne de chaque groupe d'une table en fonction d'une colonne spécifique, telle que l'ID maximum de chaque magasin.
Requête d'origine et problème de performances :
La requête initiale utilisée pour cette tâche était :
SELECT id, product_name, store_id FROM product GROUP BY store_id ORDER BY id.
Cependant, cette requête a rencontré des problèmes de performances en raison des opérations de regroupement et d'agrégation. impliqués.
Approche recommandée :
Une solution efficace consiste à utiliser une sous-requête pour déterminer l'ID maximum de chaque magasin et à le joindre à la table principale :
SELECT a.* FROM tableName a INNER JOIN ( SELECT store_ID, MAX(ID) max_ID FROM tableName GROUP BY store_ID ) b ON a.store_ID = b.store_ID AND a.ID = b.max_ID
Cette requête effectue le regroupement et l'agrégation dans la sous-requête, ce qui donne une meilleure performances.
Conseils supplémentaires en matière de performances :
Plusieurs lignes Sélection :
Si plusieurs lignes doivent être récupérées de chaque groupe, la requête suivante peut être utilisée :
SELECT ID, product_Name, store_ID FROM tableName a WHERE ( SELECT COUNT(*) FROM tableName b WHERE b.store_ID = a.store_ID AND b.ID >= a.ID ) <= 2;
Cette requête récupère jusqu'à deux lignes de chaque groupe en fonction de la colonne ID.
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!