Maison > base de données > tutoriel mysql > Comment sélectionner efficacement une ligne par groupe dans une grande table de base de données ?

Comment sélectionner efficacement une ligne par groupe dans une grande table de base de données ?

Barbara Streisand
Libérer: 2024-12-31 01:04:08
original
273 Les gens l'ont consulté

How to Efficiently Select One Row per Group from a Large Database Table?

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.
Copier après la connexion

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
Copier après la connexion

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 :

  • Assurez-vous que la table comporte des index sur les colonnes ID et store_id.
  • Envisagez d'utiliser une base de données serveur avec prise en charge des fonctionnalités de parallélisation et d'optimisation.

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal