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
Libérer: 2024-12-22 12:06:34
original
223 Les gens l'ont consulté

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))
Copier après la connexion

Utiliser :

(  ( 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

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))
Copier après la connexion

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 ) 
Copier après la connexion

au lieu de :

WHERE ( seq > 7 ) 
  OR ( seq = 7 AND sub > 42 ) 
Copier après la connexion

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 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