Maison > base de données > tutoriel mysql > Comment récupérer efficacement les derniers enregistrements dans une relation SQL un-à-plusieurs ?

Comment récupérer efficacement les derniers enregistrements dans une relation SQL un-à-plusieurs ?

Barbara Streisand
Libérer: 2025-01-19 12:26:09
original
958 Les gens l'ont consulté

How to Efficiently Retrieve the Last Records in a One-to-Many SQL Relationship?

SQL se joint pour récupérer les derniers enregistrements dans des relations un-à-plusieurs

Les requêtes de base de données impliquent souvent de récupérer les entrées les plus récentes à partir de relations un-à-plusieurs. Imaginez une base de données avec des tables « clients » et « achats » ; chaque achat appartient à un seul client. Cette approche récupère efficacement une liste de clients et leurs achats les plus récents à l'aide d'une seule instruction SELECT :

<code class="language-sql">SELECT c.*, p1.*
FROM customer c
JOIN purchase p1 ON (c.id = p1.customer_id)
LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND p1.date < p2.date)
WHERE p2.customer_id IS NULL;</code>
Copier après la connexion

Explication :

  1. Un INNER JOIN relie les tables « client » et « achat » via « customer_id », associant les clients à leurs achats.
  2. UN LEFT OUTER JOIN identifie les achats supplémentaires pour chaque client avec une date ultérieure.
  3. La clause WHERE filtre ces entrées supplémentaires, ne conservant que l'achat le plus récent par client.

Optimisation des performances : indexation

Pour des performances optimales, créez un index composite sur la table 'purchase' en utilisant les colonnes '(customer_id, date, id)'. Cela permet des recherches efficaces dans la base de données pour les achats en fonction du client, de la date et de l'identifiant.

Compromis de dénormalisation :

Le stockage de la date du dernier achat dans la table « client » (dénormalisation) peut améliorer les performances pour les requêtes fréquentes de dernier achat. Cependant, cela introduit une redondance des données et des problèmes potentiels d'intégrité.

Clause LIMITE 1 : Une alternative moins fiable

Si les ID de table « achat » sont systématiquement classés par date, l'utilisation de LIMIT 1 dans les sous-requêtes simplifie la requête. Cependant, la fiabilité de cette méthode est moins cohérente que l'approche LEFT OUTER JOIN. La méthode LEFT OUTER JOIN est généralement préférée pour sa robustesse.

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