Maison > Article > base de données > optimisation mysql (2) stratégie d'optimisation d'index
1 : Type d'index
Index : pour une requête rapide
Niveau de nœud 1, 2 à la puissance 0
Nœud niveau 1, 2 à la 1ère puissance
nœud niveau 3, 2 à la 2ème puissance
nœud niveau 4, 2 à la 3ème puissance
nœud niveau 5 couches, 2 à la 4ème puissance
. . .
. . .
. . .
Niveau 31 du nœud, 2 élevé à la puissance 32
totalise 4,2 milliards
C'est-à-dire que 4,2 milliards de nombres peuvent être vérifiés jusqu'à 32 fois
Les requêtes ordinaires nécessitent 2,1 milliards de recherches
Il s'agit de -----》index B-tree
Remarque : cela s'appelle l'index btree, en regardant dans l'ensemble, les deux utilisent des arbres équilibrés, mais en termes d'implémentation spécifique, chaque moteur est légèrement différent
Par exemple, à proprement parler, le moteur NDB utilise T-tree
Myisam, innodb , l'index B-tree est utilisé par défaut
Mais abstraitement --- le système B-tree peut être compris comme une "structure de recherche rapide triée
1.2 ressort de l'index de hachage hahahaha. . . Nima Nima. . .
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 comme ça Efficace, pourquoi ne pas 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,
utilisez l'algorithme. . . . .
Par exemple, si la clé primaire est id, alors à mesure que l'id augmente, les lignes correspondant à
id sont placées aléatoirement sur le disque. Elles sont dispersées de manière irrégulière ! !
L'algorithme de hachage alloue de l'espace disque sans aucune règle ! ! !
2 : La requête de plage ne peut pas être optimisée. 3 : L'index de préfixe ne peut pas être utilisé
Par exemple, dans btree, la valeur de la colonne field est "hellopworld", et l'index. est ajouté
Pour interroger xx=helloword, vous pouvez naturellement utiliser l'index, xx=hello, ou vous pouvez également utiliser l'index
(index de préfixe de gauche)
Parce que hash(. 'helloword') et hash('hello') sont tous les deux. La relation entre les deux est toujours aléatoire
4 : Le tri ne peut pas être optimisé.
5 : Le support des lignes est nécessaire. disons, l'emplacement des données est obtenu via l'index et les données doivent être renvoyées à la table
------》La recherche en ligne arrière signifie que le répertoire n'est qu'un dictionnaire et vous devez en fait tourner le page
2 : Malentendus courants sur l'index btree
2.1 Ajouter des index aux colonnes couramment utilisées dans les conditions Where
Exemple : où cat_id=3 et price>100; //Requête de la troisième colonne, produits de plus de 100 yuans
Erreur : les index sont ajoutés à cat_id, et, et price.
Erreur : seul cat_id ou Price index peut être utilisé , car ce sont des index indépendants et un seul peut être utilisé en même temps.
alter table add index(cat_id)
alter table add index(price)
alter table add index(goods_id) --------- ----------Un seul peut être utilisé en même temps. . . . L'index conjoint traite plusieurs colonnes comme la valeur globale
index (cat_id, good_name, price) ------------------------- - - Traitez plusieurs colonnes comme la valeur globale
2.2 Après avoir créé un index sur plusieurs colonnes, l'index fonctionnera quelle que soit la colonne interrogée
Erreur : Multiple sur le index de colonne, pour que l'index fonctionne, il doit répondre à l'exigence de préfixe gauche.
///Faire des exigences de préfixe
Prenons index(a,b,c) comme exemple (notez qu'il dépend de la commande)
L'index fonctionne-t-il
Oui, seule la colonne a est utilisée
Oui, les colonnes a et b sont utilisées
Oui, en utilisant abc
Non
La colonne a peut fonctionner comme un index, mais la colonne c ne peut pas
A peut être utilisé, b peut être utilisé, C ne peut pas être utilisé
A peut être utilisé, B peut être utilisé, C ne peut pas être utilisé
Correspondance exacte, alors la planche mesure 10 mètres de long,
Comme, préfixe gauche et requête de portée, alors la planche fait 5 mètres de long,
Vous pouvez l'épisser vous-même, vous pouvez Si vous traversez l'autre côté de la rivière, vous saurez si l'index peut être utilisé.
Comme dans l'exemple ci-dessus, où a=3 et b>10, et c=7,
Une planche mesure 10 mètres de long, A L'index de colonne fonctionne
La carte A est connectée à la carte B normalement, et l'index de la carte B fonctionne
La carte B est courte et ne peut pas être connectée à la carte C,
L'index de la colonne C ne fonctionne pas.