Maison  >  Article  >  base de données  >  Stratégie d'optimisation de l'index MySQL

Stratégie d'optimisation de l'index MySQL

黄舟
黄舟original
2017-01-20 17:04:581723parcourir

Plus loin dans cette section, des exemples pratiques et faciles à comprendre seront utilisés pour illustrer le déclenchement réel de l'index, afin d'optimiser la stratégie utilisée lors de l'ajout d'index.

1. Type d'index

1.1 Index B-tree

Remarque : il est appelé index btree d'un point de vue large, ils utilisent tous des arbres équilibrés, mais en termes de. implémentation spécifique,Chaque moteur est légèrement différent,

Par exemple, à proprement parler, le moteur NDB utilise T-tree, Myisam et innodb utilise l'index B-tree par défaut

Mais abstraitement- - -Le système B-tree peut être compris comme une « structure de recherche rapide triée ». Pour plus d'analyse, voir Type Mysql-index-BTree [Simplifié]


Indice de hachage 1.2

Dans la table mémoire, la valeur par défaut est l'index de hachage, La complexité théorique du temps de requête du hachage est O(1)

Question : Puisque la recherche de hachage est si efficace, pourquoi ne pas tous utiliser l'index de hachage ?

Réponse :

1 : Le résultat calculé par la fonction de hachage est aléatoire. Si les données sont placées sur le disque, par exemple, la clé primaire est id, alors à mesure que l'identifiant grandit, Les lignes correspondant à l'identifiant sont placées aléatoirement sur le disque

2 : Impossible d'optimiser les requêtes de plage

3 : Impossible d'utiliser l'index de préfixe. La valeur de la colonne de champ "hellopworld", et ajouter l'index, la requête xx=helloword, vous pouvez naturellement utiliser l'index, xx=hello, vous pouvez également utiliser l'index (index de préfixe de gauche). Parce que la relation entre hash('helloword') et hash('hello') est toujours aléatoire. En fait, c'est parce que HASH est précis

4 : Le tri ne peut pas être optimisé.

5. : Le support des lignes est requis. C'est-à-dire que pour obtenir l'emplacement des données via l'index, vous devez revenir à la table pour obtenir les données

2. Malentendus courants sur les index btree.

2.1 où les index sont ajoutés aux colonnes couramment utilisées dans les conditions

Exemple : où cat_id=3 et price>100 ; //Requête de la troisième colonne, produits de plus de 100 yuans

Erreur : sur cat_id, et, Les index sont ajoutés au prix.

Erreur : seul cat_id ou Price index peut être utilisé, car il s'agit d'une structure d'index indépendante, et un seul peut être utilisé en même temps. Pour une description détaillée de l'arrangement, veuillez consulter Mysql-Intuitive Illustration of Index Structure

Stratégie doptimisation de lindex MySQL

2.2 Pour que l'index fonctionne sur un index multi-colonnes, il doit répondre à l'exigence de préfixe gauche .

Erreur : après avoir créé un index sur plusieurs colonnes, l'index fonctionnera quelle que soit la colonne interrogée

Prenons index(a,b,c) comme exemple,

Stratégie doptimisation de lindex MySQL

3. Résumé :

1. L'ordre de l'index conjoint suit le principe du préfixe gauche et doit être cohérent couche par couche. La condition Where dans l'instruction SQL a. aucun contexte, comme les exemples de requête 4 et 5 ci-dessus

2 . Impliquant des requêtes de plage comme , l'index après cette requête ne peut pas être utilisé comme 7

3. d'imbrication d'une couche à la fois, le tri par ordre est utilisé et le tri par ordre ne participe pas à la condition Where, faites attention au problème de [where field a order by field a]. proposition, car elle est déjà égale à a, quelle sous-commande doit être passée

4 Dans le où dans la requête de sélection, il n'y a pas de conditions multiples La commande, mais vous devez faire attention à la commande quand. en ajoutant l'index, pareil.

5. Comment fonctionne le groupe en regroupement : Premier tri order_by, créez une table temporaire, si vous créez un index, vous pouvez éviter d'avoir à créer une table temporaire, donc l'index est valide pour le groupe


Ce qui précède est le contenu de la stratégie d'optimisation de l'index Mysql. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


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