Maison >base de données >tutoriel mysql >optimisation mysql (2) stratégie d'optimisation d'index

optimisation mysql (2) stratégie d'optimisation d'index

黄舟
黄舟original
2016-12-29 16:06:021323parcourir

1 : Type d'index

Index : pour une requête rapide

optimisation mysql (2) stratégie doptimisation dindex

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)


Déclaration


L'index fonctionne-t-il


Où a=3


Oui, seule la colonne a est utilisée


Où a=3 et b=5


Oui, les colonnes a et b sont utilisées


Où a=3 et b=5 et c=4


Oui, en utilisant abc


Où b=3 / où c=4


Non


Où a=3 et c=4


La colonne a peut fonctionner comme un index, mais la colonne c ne peut pas


Où a=3 et b>10 et c=7


A peut être utilisé, b peut être utilisé, C ne peut pas être utilisé


Identique à ci-dessus, où a=3 et b comme 'xxxx%' et c=7


A peut être utilisé, B peut être utilisé, C ne peut pas être utilisé


Pour facilité de compréhension, supposons que ABC est une planche de 10 mètres de long chacune et que la rivière mesure 30 mètres de large.


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.

Ce qui précède est le contenu de la stratégie d'optimisation d'index d'optimisation mysql (2). 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