Maison >base de données >tutoriel mysql >UNION ALL avec LIMIT 1 peut-il simuler efficacement des requêtes séquentielles ?

UNION ALL avec LIMIT 1 peut-il simuler efficacement des requêtes séquentielles ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-04 14:59:45714parcourir

Can UNION ALL with LIMIT 1 Efficiently Simulate Sequential Queries?

Requêtes sélectives séquentielles utilisant UNION ALL

Problème :
Recherche d'une seule ligne dans une table de base de données avec critères de recherche progressivement réduits. Par exemple :

SELECT * FROM image WHERE nom LIKE 'text' AND group_id = 10 LIMIT 1

Si aucun résultat n'est obtenu, exécutez :

SELECT * FROM image WHERE nom LIKE 'text' LIMIT 1

Si toujours aucun résultat, exécuter :

SELECT * FROM image WHERE group_id = 10 LIMIT 1

Ce processus peut-il être effectué avec un seul expression ?

Solution :

SELECT * FROM image WHERE name = 'name105' AND group_id = 10
UNION ALL
SELECT * FROM image WHERE name = 'name105'
UNION ALL
SELECT * FROM image WHERE group_id = 10
LIMIT 1;

Explication :

  • UNION TOUS combine les résultats de plusieurs instructions SELECT dans une seule table.
  • La clause LIMIT précise que seule la première La ligne du résultat combiné doit être renvoyée.
  • Les index sur (name, group_id) et (group_id) sont cruciaux pour les performances.
  • Cette requête est particulièrement efficace car PostgreSQL optimise le plan d'exécution pour arrêter traiter des instructions SELECT supplémentaires une fois que LIMIT est satisfaite.

Générique Solution :

L'approche ci-dessus peut être généralisée pour n'importe quel nombre de paramètres de recherche en ajoutant des instructions SELECT supplémentaires à la chaîne UNION ALL.

Considérations relatives aux résultats triés :

Étant donné que la clause LIMIT s'applique à l'ensemble du résultat, le tri n'est pas particulièrement utile car seule la première ligne sera renvoyée.

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