Exécuter une seconde requête SELECT conditionnelle basée sur les résultats de la première
L'amélioration de l'efficacité des scripts PHP peut impliquer l'exploitation des opérations de base de données. Une technique d'optimisation consiste à exécuter une requête SELECT différente uniquement lorsque la première requête SELECT ne renvoie aucune ligne ou qu'une condition spécifique est remplie.
Par exemple, considérons les requêtes suivantes :
SELECT * FROM proxies WHERE (A='B') SELECT * FROM proxies WHERE (A='C')
Pour conditionnellement exécutez la deuxième requête uniquement si la première requête renvoie un ensemble vide, l'approche suivante peut être utilisée :
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 approche implique d'exécuter chaque requête deux fois, une fois pour comptage et une fois pour récupérer les données. Une solution plus efficace consiste à utiliser UNION ALL 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 de la table des proxys où A='B' si elles existent. S'ils n'existent pas, il récupère les lignes avec A='C'. Cette approche réduit considérablement le nombre d'appels à la base de données, améliorant ainsi les performances des scripts.
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!