Maison >base de données >tutoriel mysql >Comment utiliser efficacement plusieurs colonnes dans la clause WHERE IN de MySQL avec des index ?
Colonnes multiples MySQL dans la clause IN
Problème :
Vous avez une table de base de données avec quatre colonnes représentant les coordonnées géographiques : x0, y0, x1 et y1. Vous avez un index sur ces colonnes dans l'ordre x0, y0, x1, y1. Vous souhaitez interroger efficacement la table à l'aide d'une liste de paires de coordonnées dans une clause WHERE IN.
Solution :
Pour utiliser efficacement l'index, réécrivez le prédicat IN comme une série de conditions OU, où chaque condition compare les coordonnées de la ligne actuelle à une paire de coordonnées dans le liste.
Exemple :
Au lieu de :
(x0, y0, x1, y1) IN ((4, 3, 5, 6), (9, 3, 2, 1))
Utiliser :
( ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 ) OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 ) )
Optimisation dans Versions MySQL plus récentes :
Dans les versions plus récentes de MySQL, l'optimiseur a été amélioré pour mieux utiliser les index dans de telles requêtes. La syntaxe :
(a,b) IN ((7,43),(7,44),(8,1))
est prise en charge depuis longtemps, mais des problèmes de performances existaient auparavant. Le nouvel optimiseur génère désormais des plans d'exécution plus efficaces.
Remarque :
Une optimisation similaire s'applique aux constructions OR dans les clauses WHERE. Pour une efficacité améliorée, pensez à utiliser :
WHERE ( seq >= 7 ) AND ( seq > 7 OR sub > 42 )
au lieu de :
WHERE ( seq > 7 ) OR ( seq = 7 AND sub > 42 )
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!