SQL IN vs = : écarts de performances
Aperçu :
L'opérateur SQL IN
vérifie si une valeur existe dans une liste spécifiée. Cependant, les performances peuvent souffrir considérablement lors de l'utilisation de IN
par rapport à l'opérateur =
, en particulier dans certains scénarios.
Le problème :
Une requête SQL spécifique a démontré une différence de performances substantielle entre l'utilisation de IN
et =
, même lorsque IN
ne comparait qu'une seule valeur.
Cause fondamentale :
Le goulot d'étranglement des performances provient d'une faille d'optimisation MySQL. MySQL classe à tort une sous-requête dans une clause IN
comme une sous-requête dépendante, au lieu d'une sous-requête indépendante.
Sous-requêtes dépendantes ou indépendantes :
Cette erreur de classification est critique. Les sous-requêtes dépendantes s'exécutent de manière répétée pour chaque ligne de la requête externe, ce qui a un impact considérable sur les performances. En revanche, les sous-requêtes indépendantes ne s'exécutent qu'une seule fois et leurs résultats sont mis en cache pour plus d'efficacité.
Analyse simplifiée :
Une version simplifiée de la requête d'origine reproduisait le problème de performances, confirmant que la sous-requête de la clause IN
était traitée comme dépendante, ce qui entraînait une exécution plus lente.
Résolution :
L'identification erronée par MySQL du type de sous-requête comme dépendant est à l'origine de la dégradation des performances lors de l'utilisation de IN
. Ce problème est résolu dans MySQL 5.6.x et versions ultérieures.
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!