Maison >base de données >tutoriel mysql >Pourquoi ma condition SQL IN est-elle plus lente que '=' lors de la comparaison d'une valeur unique ?

Pourquoi ma condition SQL IN est-elle plus lente que '=' lors de la comparaison d'une valeur unique ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-16 17:01:10520parcourir

Why is My SQL IN Condition Slower Than

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!

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