Maison >base de données >tutoriel mysql >Comment puis-je optimiser les requêtes MySQL en combinant des instructions SELECT en fonction du nombre de lignes ?

Comment puis-je optimiser les requêtes MySQL en combinant des instructions SELECT en fonction du nombre de lignes ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 21:27:13855parcourir

How Can I Optimize MySQL Queries by Combining SELECT Statements Based on Row Counts?

Combinaison de requêtes SELECT en fonction du nombre de lignes

En PHP, l'optimisation des requêtes de base de données peut améliorer les performances des scripts. Une technique consiste à insérer la logique dans MySQL en exécutant conditionnellement une deuxième requête SELECT si la première ne renvoie aucune ligne.

Considérez l'exemple suivant :

SELECT * FROM proxies WHERE (A='B') || SELECT * FROM proxies WHERE (A='C')

Ce code exécute les deux requêtes SELECT quel que soit le résultat de la première requête.

Une meilleure approche consiste à utiliser la fonctionnalité d'exécution conditionnelle de MySQL, comme le montre cette code :

IF (SELECT count(*) FROM proxies WHERE A='B')>0
    THEN SELECT * FROM proxies WHERE A='B'
ELSEIF (SELECT count(*) FROM proxies WHERE A='C')>0
    THEN SELECT * FROM proxies WHERE A='C'
END IF

Cependant, cette méthode exécute toujours les requêtes de comptage deux fois.

Une solution plus efficace consiste à utiliser UNION ALL en conjonction avec EXISTS :

SELECT *
FROM proxies
WHERE A='B'
UNION ALL
SELECT *
FROM proxies
WHERE A='C' AND NOT EXISTS (
    SELECT 1
    FROM proxies
    WHERE A='B'
)

Cette requête récupère les lignes avec A='B' si elles existent, et sinon, elle récupère les lignes avec A='C'. En utilisant la condition EXISTS, la requête récupère uniquement les lignes pour la première condition spécifiée (A='B') si elles existent, ce qui entraîne une seule exécution de la requête de comptage.

Démo SQL Fiddle : https:/ /www.sqlfiddle.com/#!9/3de314

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