Maison >base de données >tutoriel mysql >Comment combiner efficacement UNION et LIMIT dans MySQL pour récupérer des données de plusieurs tables ?

Comment combiner efficacement UNION et LIMIT dans MySQL pour récupérer des données de plusieurs tables ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-14 13:06:43394parcourir

How to Efficiently Combine UNION and LIMIT in MySQL to Retrieve Data from Multiple Tables?

Optimisation des requêtes MySQL : combiner UNION et LIMIT pour la récupération de données multi-tables

Récupérer des données de plusieurs tables nécessite souvent de combiner les résultats à l'aide de UNION et de limiter le nombre de lignes avec LIMIT. Ce guide démontre une approche efficace pour y parvenir.

Considérons un scénario dans lequel vous devez extraire un total de 20 offres d'emploi de deux entreprises spécifiques, avec un maximum de 10 emplois par entreprise. La requête optimisée suivante accomplit cela :

<code class="language-sql">(
  SELECT c.name, j.title, j.`desc`, j.link 
  FROM jobs_job j
  INNER JOIN companies_company c ON j.company_id = c.id
  WHERE c.name = 'Company1'
  ORDER BY name, title
  LIMIT 0, 10
) UNION ALL
(
  SELECT c.name, j.title, j.`desc`, j.link 
  FROM jobs_job j
  INNER JOIN companies_company c ON j.company_id = c.id
  WHERE c.name = 'Company2'
  ORDER BY name, title
  LIMIT 0, 10
)</code>

La clé de l'efficacité réside dans le placement de LIMIT dans chaque déclaration SELECT individuelle. Cela garantit que les résultats de chaque entreprise sont limités indépendamment à 10 lignes. L'opérateur UNION ALL (utilisé ici pour la vitesse ; UNION supprimerait les doublons) combine ensuite ces ensembles de résultats limités, garantissant un maximum de 20 lignes dans la sortie finale.

La clause ORDER BY dans chaque sous-requête conserve les résultats triés par nom d'entreprise et titre de poste avant l'opération syndicale. Cela garantit que l’ensemble de résultats combiné final reste trié. Cette méthode est bien plus efficace que d'appliquer LIMIT après l'opération UNION, ce qui nécessiterait de traiter tous les résultats avant d'appliquer la limite.

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!

Déclaration:
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