Maison >base de données >tutoriel mysql >Comment récupérer efficacement uniquement la ligne la plus récente dans un MySQL JOIN avec pagination ?
Récupération de la ligne la plus récente uniquement dans un MySQL JOIN avec pagination
Lorsque vous traitez des tables de données historiques comme customer_data, il est souvent souhaitable de rejoindre uniquement la ligne la plus récente vers une autre table, tout en gérant également la pagination.
Original Requête :
SELECT *, CONCAT(title,' ',forename,' ',surname) AS name FROM customer c INNER JOIN customer_data d on c.customer_id=d.customer_id WHERE name LIKE '%Smith%' LIMIT 10, 20
JOIN optimisé avec la clause WHERE :
Pour récupérer uniquement la ligne la plus récente pour chaque client, ajoutez la condition suivante au WHERE clause :
... WHERE d.customer_data_id IN ( SELECT MAX(customer_data_id) FROM customer_data WHERE customer_id = c.customer_id ) ...
Indexation alternative Solution :
Pour améliorer les performances, en particulier dans les requêtes lourdes, pensez à créer un index sur les colonnes (customer_id, customer_data_id) dans customer_data. Cela permet à MySQL d'identifier rapidement la ligne la plus récente pour chaque client.
Exemple de clause WHERE avec index :
... WHERE d.customer_id = c.customer_id AND d.customer_data_id = ( SELECT MAX(customer_data_id) FROM customer_data WHERE customer_id = c.customer_id ) ...
CONCAT avec LIKE :
Oui, utiliser CONCAT avec LIKE est une méthode valide pour rechercher sur plusieurs champs concaténés ensemble. Ceci est particulièrement utile lorsque les colonnes d'origine ne sont pas indexées et entraînerait normalement une analyse complète de la table.
Considérations supplémentaires :
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!