Maison >base de données >tutoriel mysql >Comment utiliser efficacement plusieurs colonnes dans la clause WHERE IN de MySQL avec des index ?

Comment utiliser efficacement plusieurs colonnes dans la clause WHERE IN de MySQL avec des index ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-22 12:06:34143parcourir

How to Efficiently Use Multiple Columns in MySQL's WHERE IN Clause with Indexes?

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!

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