Maison > base de données > tutoriel mysql > Comment interroger efficacement MySQL avec plusieurs colonnes dans une clause IN ?

Comment interroger efficacement MySQL avec plusieurs colonnes dans une clause IN ?

Susan Sarandon
Libérer: 2024-12-26 15:00:15
original
870 Les gens l'ont consulté

How to Efficiently Query MySQL with Multiple Columns in an IN Clause?

Requête efficace MySQL pour plusieurs colonnes dans la clause IN

Votre base de données MySQL comporte quatre colonnes correspondant aux coordonnées géographiques x, y pour le début et position finale. Vous souhaitez effectuer une requête efficace sur ces données, en utilisant une liste d'une centaine de combinaisons de paires géographiques.

L'approche par force brute consisterait à utiliser une clause IN, comme suggéré dans votre réponse Oracle :

SELECT * FROM my_table WHERE (x0, y0, x1, y1) IN ((4, 3, 5, 6), ... ,(9, 3, 2, 1));
Copier après la connexion

Cependant, cette approche n'est pas efficace pour MySQL, surtout avec un grand nombre de lignes.

Pour optimiser la requête, on peut profiter de l'index sur ces quatre colonnes. Nous pouvons réécrire le prédicat IN sous la forme d'une série de conditions OR :

(  ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 ) 
OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 )
)
Copier après la connexion

En utilisant des conditions distinctes, nous forçons MySQL à utiliser l'index pour chaque condition, améliorant ainsi considérablement les performances des requêtes.

Remarque pour les versions plus récentes de MySQL

Dans les versions plus récentes de MySQL, l'optimiseur a été amélioré pour générer des plans d'exécution plus efficaces. La syntaxe (a,b) IN ((7,43),(7,44),(8,1)) est prise en charge depuis longtemps, mais les versions antérieures rencontraient des problèmes de performances. Cependant, ces problèmes ont été résolus et les optimiseurs plus récents peuvent utiliser efficacement les index pour les constructions OR.

Conclusion

En utilisant l'approche des conditions OR, vous pouvez améliorer considérablement la efficacité de votre requête MySQL lors de la recherche de plusieurs colonnes dans une clause IN. Cette technique exploite l'index disponible et garantit des performances optimales pour les grands ensembles de données.

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