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 ?
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!