Maison > base de données > tutoriel mysql > Pourquoi les requêtes MySQL \'IN\' avec sous-requêtes sont-elles si lentes ?

Pourquoi les requêtes MySQL \'IN\' avec sous-requêtes sont-elles si lentes ?

Susan Sarandon
Libérer: 2024-10-31 16:48:30
original
555 Les gens l'ont consulté

 Why are MySQL

Requêtes MySQL "IN" : dilemme de sous-requête par rapport à l'efficacité de la valeur explicite

Dans une requête MySQL, tirer parti de l'opérateur "IN" avec un La sous-requête peut entraîner des goulots d'étranglement importants en termes de performances. Ceci est démontré par une requête sur la table em_link_data contenant environ 7 millions de lignes, où la requête "IN" avec une sous-requête prend 18 secondes à s'exécuter.

À l'inverse, le remplacement de la sous-requête par des valeurs explicites entraîne des résultats éclair. -exécution rapide, se terminant en moins de 1 milliseconde. Ce contraste frappant soulève la question : pourquoi les requêtes "IN" sont-elles si lentes avec les sous-requêtes ?

Le coupable réside dans le traitement des sous-requêtes. Dans MySQL, les sous-requêtes sont évaluées à chaque fois qu'elles sont rencontrées, ce qui signifie que la sous-requête de la requête "IN" s'exécutera plusieurs fois, potentiellement des millions de fois. Ce processus coûteux entrave considérablement les performances.

En revanche, lorsque des valeurs explicites sont utilisées, la base de données peut accéder directement aux enregistrements pertinents dans la table, évitant ainsi le besoin d'évaluations de sous-requêtes fastidieuses. Cet accès direct se traduit par des temps d'exécution nettement plus rapides.

Pour atténuer le goulot d'étranglement des performances, envisagez les stratégies suivantes :

  • Réécriture de la requête en tant que JOIN : Ceci Cette approche peut éliminer le besoin de sous-requête, ce qui donne lieu à une requête unique et plus efficace.
  • Index sur les colonnes de liaison : Assurez-vous que les index sont créés sur les colonnes impliquées dans les conditions « IN ». . Cette étape aide la base de données à identifier rapidement les enregistrements pertinents.
  • Optimisation des paramètres de la base de données : Ajustez les paramètres MySQL pertinents pour optimiser les performances des requêtes. Ceux-ci peuvent inclure des paramètres tels que innodb_buffer_pool_size et sort_buffer_size.

Bien que ces mesures puissent améliorer les performances, il est crucial d'éviter autant que possible d'utiliser l'opérateur « IN » avec des sous-requêtes. En reconnaissant le contraste d'efficacité entre les sous-requêtes et les valeurs explicites et en mettant en œuvre des stratégies d'optimisation appropriées, vous pouvez accélérer considérablement les requêtes MySQL "IN".

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal