Trouver un moyen commun d'exemple 1.1
Blog de référence: https://www.cnblogs.com/wuchanming/p/6886020.html
1, recherche séquentielle (recherche linéaire)
1. La plupart algorithme de recherche de base est certainement une recherche séquentielle (recherche linéaire), qui est, chaque élément de la méthode comparative, mais cette méthode est grande quantité de l'efficacité des données est très faible.
2. Structure de données: ordonnée ou file d' attente non ordonnée
3. Complexité: O (n)
2, recherche binaire
; 1. De l'élément central du tableau, si l'élément intermédiaire de l'élément est juste pour trouver, le processus de recherche se termine le premier
semestre de 2. Si un élément particulier est supérieur ou inférieur à l'élément intermédiaire de la matrice est supérieure ou inférieure à celle de l'élément intermédiaire Recherchez, comparez et les racines commencent à partir du milieu des mêmes éléments.
3. Si le tableau est vide à un certain stade, il représente pas trouvé.
4. Structures de données: réseau ordonné
5. Complexité: O (logN)
3, arbre de tri binaire pour trouver
Caractéristiques 1) arbre de tri binaire est:
1. Si le sous-arbre gauche n'est pas vide, les valeurs de tous le noeud enfant gauche de l'arbre est inférieure à la valeur de la racine;
2. Si ce n'est pas vide sous-arbre droit, le sous-arbre droit des nœuds qui sont tous supérieurs à la valeur de la racine;
3. ses sous-arbres gauche et à droite sont également arbre de tri binaire.
2) Comment rechercher:
Si b est un arbre vide, la recherche échoue, ou:
si x est égal à la valeur de b du domaine racine des données, la recherche est couronnée de succès, sinon:
si la valeur est inférieure à b champ du nœud racine x de données, recherche le sous - arbre gauche; autrement:
Trouver le sous - arbre droit.
Structures de données: arbre de tri binaire
complexité du temps: O (de log2N)
4, le hachage du hachage (table de hachage)
1. Le premier principe consiste à créer une table de hachage (table de hachage) et une fonction de hachage en fonction de la valeur de clé, l'économie de carburant sur la base d'une clé par la fonction de hachage, la position d'élément de données de positionnement.
2. Structures de données: table de hachage
3. Complexité: presque O (1), selon la quantité de conflits.
1.2 Principes de la structure de données d'index ordinateur est fourni associés
1, la mémoire principale de l'ordinateur et la mémoire externe Présentation
1. Dans un système informatique comprend généralement deux types de mémoire, la mémoire principale de l' ordinateur (RAM) et une mémoire externe (disque dur, CD, SSD, etc.).
2. Dans la conception d'algorithmes d'indexation et des structures de stockage, nous devons prendre en compte les deux types de fonctions de stockage.
3. La principale vitesse de lecture de la mémoire est plus rapide, par rapport aux données taux de lecture de la mémoire principale, le principal disque externe que de plusieurs ordres de grandeur plus lente, en particulier les différences entre eux sera décrit en détail plus loin.
4. Tout l'algorithme de recherche ci-dessus parlez des données stockées dans la mémoire supposée principale de l'ordinateur, la mémoire principale de l'ordinateur est généralement faible, les données réelles dans la base de données sont stockées dans la mémoire externe.
2, comment évaluer la performance de l'indice
1. En général, l'indice lui-même est aussi grande, il ne peut pas tous être stockés dans la mémoire, de sorte que l'index est souvent stockée sous la forme d'un fichier d'index du disque.
2. Dans ce cas, le processus produira un indice de consommation des E / S disque recherche, en ce qui concerne l'accès mémoire, E / S accès à la consommation de plusieurs ordres de grandeur.
3. Par conséquent, l'évaluation du bien-fondé d'une structure de données comme un indice de l'indicateur le plus important est l'aspect progressif à la complexité du processus de nombre d'opérations d'E / S disque.
4. En d'autres termes, l'organisation structurelle de l'indice pour minimiser le nombre de processus d'accès disque de E / S.
3, le principal accès mémoire principe
Note: cet article à renoncer à des différences spécifiques, abstraire un modèle d'accès très simple pour illustrer le principe de fonctionnement de la RAM
1. D'un point de vue abstrait, la mémoire principale est une matrice composée d'une série d'unités de stockage, l'unité de stockage stocke pour chaque donnée de taille fixe.
2. Chaque cellule de mémoire a une adresse unique, la mémoire principale adressage des règles complexes modernes, il sera simplifié dans une adresse à deux dimensions.
3. positionné de manière unique à une unité de stockage par l'intermédiaire d'une adresse de rangée et une adresse de colonne.
modèle montre la figure la mémoire principale d'un 4 x 4:
Procédé d'accès à la mémoire principale est la suivante:
1) Lorsque le système a besoin de lire la mémoire principale, les signaux d'adresse sur le bus d'adresse au principal téléchargement de la mémoire, après avoir lu les principaux signaux d'adresse de mémoire,
le signal d' analyse et située à une cellule de mémoire spécifique, cette unité de stockage des données sur le bus de données, par la lecture des autres parties.
2) un procédé similaire à écrire la mémoire principale, l'unité centrale à écrire dans l'adresse et les données sont placées sur le bus d'adresse et de bus de données, la mémoire principale pour lire le contenu des deux bus, l'opération d'écriture en conséquence.
3) on peut le voir ici, la principale temps d'accès mémoire est que de façon linéaire avec le nombre d'accès, car une opération mécanique n'existe pas, n'a pas d'effet « distance » deux accès aux données en fonction du temps
Durée 4), par exemple, prendre la première prise A0 A0 A1, puis prendre la consommation de préemption D3 est le même.
4, principe d'accès au disque
1. L'indice est généralement stocké sous forme de fichiers sur le disque, la recherche d'index nécessite des opérations d'E / S disque.
2. avec une autre mémoire principale, E / S prend un mouvement mécanique disque, de sorte que le disque consommation de temps E / S est énorme.
3. Les données lues sur le disque est un mouvement mécanique, lorsque l'on souhaite lire les données du disque, le système sera l'adresse logique sur le disque de données.
4. Le circuit de commande de disque magnétique selon la logique d'adressage pour traduire une adresse logique en une adresse physique, à savoir la détermination des données à lire dans la piste, quel secteur.
5. Pour lire les données du secteur, les besoins de la tête magnétique à mettre sur ce secteur, afin d'y parvenir, les besoins de la tête magnétique pour déplacer avec la piste correspondante, un processus appelé recherche.
6. Le temps de recherche est appelé le temps, et la rotation du disque de rotation à la tête du secteur cible, processus de temps appelé un temps de rotation, et enfin est transmis à lire les données.
7. Par conséquent, le temps nécessaire pour lire les données à chaque fois peut être divisé en temps de recherche, la latence de rotation, le temps de transmission de trois parties.
1) est un bras magnétique à rechercher la piste spécifiée le temps requis, généralement dans les 5 ms de disque ordinaire ou moins.
2) On entend souvent retard de rotation est la vitesse de rotation du disque, tel qu'un disque 7200, peut être représentée par 7200 tours par minute, qui est capable de tourner à 120 fois par seconde, la latence de rotation est 1/120/2 = 4.17ms.
3) fait référence au temps de transmission des données à lire ou à écrire à partir du disque sur le disque, habituellement en quelques dixièmes de millisecondes, le temps par rapport aux deux premières peut être négligée.
8. opérations I / O des problèmes énormes
1) puis un temps d'accès au disque, à savoir un disque de temps IO égal à environ + 4,17 = 9 ms environ 5
2) semble assez bonne, mais vous savez 500 machines -MIPS peut effectuer 500 millions d' instructions par seconde
3) parce que l'instruction se fonde sur la nature du pouvoir, autrement dit IO effectuer un temps peut exécuter des instructions 400.000
base de données 4) souvent cent mille millions et dix millions de données, chaque 9 millisecondes, évidemment une catastrophe.
5, disque lecture anticipée
Par conséquent, afin d'améliorer l'efficacité, afin de minimiser le disque d'E / S, afin d'atteindre cet objectif, le disque est souvent pas lu uniquement sur la demande, mais pré-lecture à chaque fois.
Même si un seul octet, le disque commence à partir de cette position, une longueur de données lues de manière séquentielle de nouveau dans la mémoire.
Pour ce faire est basé sur la théorie de la science informatique dans le fameux principe de la localité: Lorsqu'une donnée est utilisée, les données dans son voisinage souvent être utilisés immédiatement.
La longueur est la page de prélecture en général (page) est un multiple entier.
blocs logiques de page de gestion de la mémoire informatique, le matériel et les systèmes d'exploitation ont tendance à la mémoire principale et la zone de stockage de disque est divisé en blocs successifs de taille égale
Chaque bloc de mémoire appelé (dans de nombreux systèmes d'exploitation, la taille de page est généralement obtenue 4K), la mémoire principale et les données d'échange de disque en unités de page.
Lorsque les données du programme à lire ne sont pas dans la mémoire principale, une exception de défaut de page est déclenché, le système envoie un signal sur le disque pour lire le disque
les données de disque pour trouver la position de départ à lire en continu une ou plusieurs pages chargées en mémoire, et les rendements anormaux, le programme continue de fonctionner.
5, B-Tree / B + stockage de la structure d'arbre
1. Voici enfin analyser pourquoi la base de données en utilisant l'indice B - / + arbre de la structure de stockage.
2. La base de données ci-dessus de l'index mentionné est stocké sur le disque et nous utilisons généralement le disque temps d'E / S pour évaluer le bien-fondé de la structure de l'indice.
3. début d'analyse B-Tree, selon la définition du B-Tree, la récupération d'un des noeuds d'accès h-1 apparent maximum de besoin (racine de résident de mémoire).
4. Le concepteur de l'utilisation intelligente du disque du système de base de données principe lecture anticipée, un nœud est égal à la taille d'une page, de sorte que chaque noeud ne nécessite qu'un seul peut être entièrement chargé d'E / S.
5. A cet effet, le B-Tree est aussi une mise en œuvre pratique utiliserait les techniques suivantes:
1) Chaque fois qu'un nouveau noeud pour appliquer directement un espace de page, assurant ainsi sur un noeud physique être stockées dans une page,
2) couplée à une allocation mémoire de l' ordinateur sont aligné sur une page, un noeud est réalisé une seule fois I / O.
1.3 indices MyISAM obtenus
1, les indices MyISAM atteint l'introduction
1. moteur MyISAM utilise un B + structure d'index d'arbre stockée dans le champ de données, le noeud de feuille est l'adresse de l'enregistrement de données.
2. MyISAM algorithme de recherche premier algorithme de recherche conformément à la B + index de recherche Arbre.
3. Si la clé spécifiée est présente, on retire la valeur de son champ de données, la valeur du champ de données d'adresse, lit l'enregistrement de données correspondant.
4. mode index MyISAM est aussi appelée « non-cluster », la raison que l'on appelle à distinguer l'index ordonné en clusters InnoDB.
2, index MyISAM schémas
Est fourni dans le tableau 1. Ici, un total de trois, nous supposons Col1 clé primaire, l'index primaire est une des tables MyISAM figure (clé primaire) schématiquement.
2. On peut voir fichier d'index MyISAM sauvegarder les enregistrements de données d'adresses.
1,4 indice InnoDB réalisé
Note: Bien que InnoDB également être utilisé comme une structure d'index B + arbre, mais la manière de mise en œuvre spécifique, mais avec des MyISAM.
1, la différence entre 1: fichier de données InnoDB est lui - même un fichier d'index
1. À partir de la connaissance ci-dessus, le fichier d'index MyISAM et le fichier de données sont séparées, seule l'adresse du fichier d'index stocké dans l'enregistrement de données.
2. Dans InnoDB, le fichier de données de table de la presse elle-même est un indice B + arbre structure organisée, champ de données de nœud de feuille d'arbre est titulaire d'un enregistrement de données complète.
3. La clé est l'index de clé primaire des tables de données, de sorte que le fichier de données de table InnoDB lui-même est l'indice principal.
Description:
Vous pouvez voir le nœud feuille contient un enregistrement complet des données, cet indice a appelé l'index ordonné en clusters.
Parce que le fichier de données lui-même Yaoan InnoDB agrégat de clé primaire, il faut la table InnoDB doit avoir une clé primaire (ne peut pas MyISAM)
Si pas explicitement spécifié, le système sélectionne automatiquement une colonne de MySQL comme la clé primaire peut identifier de manière unique un enregistrement de données
Si cette colonne n'existe pas, alors automatiquement la table MySQL InnoDB générant un champ caché comme la clé primaire, la longueur du champ est de 6 octets de type entier long.
2, la différence entre les deux: le champ de données auxiliaires InnoDB stocke une valeur d'index correspondant à l'adresse d'enregistrement de la clé primaire de la place
1. En d'autres termes, tous les index secondaire InnoDB sont cités comme champ de données clé primaire.
2. Ici, en caractères anglais ASCII que les critères de comparaison.
3. Cette mise en œuvre permet à l'index ordonné en clusters de clé primaire et appuyez sur la recherche est très efficace, mais les besoins d'index de recherche d'index secondaire à récupérer deux fois
4. Tout d'abord, la recherche de soutien obtenir l'indice de clé primaire, puis utilisez l'index primaire à la clé primaire pour récupérer des enregistrements obtenus.
3, pourquoi recommande pas l'utilisation du terrain tant que la clé primaire
1. Sachez par exemple, l'indice obtenu après InnoDB, il est facile de voir pourquoi trop longtemps n'est pas recommandé comme clé primaire
2. Tous les index secondaires sont des références à l'index principal, l'indice principal à long FERAI index secondaires deviennent trop importants.
3. Autre exemple, un champ non-monotones comme la clé primaire dans InnoDB pas une bonne idée parce que le fichier de données InnoDB est lui-même un arbre B +,
4. clé primaire non monotones entraînera l'insertion d'un nouvel enregistrement dans un fichier de données afin de maintenir les propriétés de l'arbre B + fendu et ajustement fréquent, très inefficace, et l'utilisation du champ auto-énergisant comme la clé primaire est un bon choix.
1.5 Utilisation Policy Index
1, l'indice commun (indice composite)
1. L'indice commun est en fait très simple, par rapport à l'indice général un seul champ, vous pouvez créer un index d'index joint plusieurs champs
2. Il est également principe très simple, par exemple, nous créons un indice commun sur (a, b, c) champ, les lignes d'index sont triés selon le champ A, B puis suivre le champ de tri est alors domaine C
3. En fait, il suffit de regarder pour l'indice commun du dictionnaire est le même, selon la première lettre du premier chèque, puis vérifier conformément à la deuxième lettre
4. vérifié ou seulement la première lettre, mais ne peut pas ignorer la première lettre de l'alphabet à partir de la deuxième enquête. Ceci est connu comme le plus principe préfixe gauche.
L'index d'articulation est caractérisée par:
1) Le premier champ doit être commandé
2) Lorsque la valeur du champ est égale à la première fois, le deuxième champ est commandé, comme dans le tableau ci - dessous , lorsque A = B pour toutes les valeurs de 2 est ordonnée , et ainsi de suite, quand le même B vaut tous les champs sont classés C arrangement
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
'' ' Le principe le plus gauche préfixe ' '' # ### 1, la requête suivante peut utiliser l'index '' ' SELECT * de la table WHERE A = 1, SELECT * de la table WHERE A = 1 et b = 2; sélectionner * à partir de la table où a = 1 et b = 2 et c = 3; au-dessus de trois requêtes selon (a), (a, b ), (a, b, c) peuvent tirer parti de l'ordre de l'indice, ce qui est le plus gauche match de préfixe. '' ' # ### 2, si la requête est la suivante :' '' SELECT * à partir de la table la où A = 1 et c = 3, puis utiliser uniquement l'un de l' index. « » « # ### 3, afin de ne pas utiliser l'index » « » SELECT * OÙ du tableau B = 2 et C = 3; pas utilisé parce que la plus à gauche d'un préfixe, de sorte que la requête de l' utilisateur à l'index. « » '
2, l'index de préfixe
1. index préfixe colonne entier est remplacé par le préfixe de la colonne comme une clé d'index, la longueur de préfixe actuel, vous pouvez le faire soit index préfixe sélectivement proche index de colonne
2. En même temps que la clé d'index est raccourci pour réduire la taille et le coût du maintien du fichier d'index.
3. En général ce qui suit peut utiliser l'index de préfixe:
1) les colonnes de chaîne (varchar, char, texte, etc.), ou la nécessité pour les matches de match sur le terrain de face. = À savoir « xxx » ou comme « XXX% »
2) chaîne elle - même peut être relativement longue, et commencer les premiers caractères ne sont pas les mêmes. (Exemple: adresse du destinataire, le nom des étrangers)
4. Index du préfixe MySQL peut réduire efficacement la taille du fichier d'index, l'indice de vitesse accrue.
L'indice de préfixe, mais a aussi ses inconvénients: l'index de préfixe MySQL ne peut pas être utilisé dans la clause ORDER BY ou GROUP BY, ils ne peuvent pas être utilisé comme un indice de couverture (indice de couverture).
3, stratégie d'optimisation de l'index
Description: optimisation de MySQL est divisé en optimisation structurelle (optimisation Scheme) et l' optimisation des requêtes (optimisation de requêtes).
# 1, préfixe principe correspondant à gauche, mentionné ci - dessus un # 2, la clé primaire de la clé étrangère doit être indexée # 3, colonne où, groupe par, pour en apparaissant dans un index # 4, pour sélectionner une haute distinction colonne comme un indice, l'équation de la discrimination est count (col distinct) / count ( *), indique le rapport du champ ne sera pas répétée, # 5, en utilisant un indice de préfixe de chaîne plus longue « » ' # 6, pas trop pour créer l' index la relation entre l'index et le nombre de compromis DML, DML est inséré, supprimé la manipulation des données. Il devrait peser un problème, l' indexation objectif est d'améliorer la recherche d' efficacité, mais trop d'indexation, aura une incidence sur l'insert, le taux de suppression de données, parce que nous avons modifié les données de la table, les index doivent également être ajustées pour reconstruire « » « » '' # 7, pour les requêtes comme, "%" pas sur le front. SELECT * FROMhoudunwangWHEREunameLIKE « % de soutien » - en prenant l'index SELECT * FROMhoudunwangWHEREunameLIKE « %% soutien » - ne prenez pas l'indice « » « » « » # 8, où la condition de requête ne correspond pas au type de données ne peut pas utiliser l'index des chaînes et des nombres moins en utilisant un index; EXPLIQUER SELECT * FROMaWHEREa = « 1 » - prendre l'index EXPLIQUER SELECT * FROM WHERE a = 1 - ne prenez pas l'index expression régulière n'utilise pas un indice, il doit être bien compris, il est difficile de voir la raison pour laquelle le mot - clé dans SQL regexp « » '
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
Répertorié principes: 1. Le préfixe la plus à gauche principe de correspondance, un principe très important, MySQL seront toujours adaptés à la droite jusqu'à ce qu'il rencontre une des requêtes de gamme (>, < , BETWEEN, comme) pour arrêter le match, tel que A = 1 et b = 2 et C>. 3 et D =. 4 si la mise en place (a, b, c, d ) de l'indice d'ordre, d est inférieur à l'indice, si l'indice pour établir (a, b, d, c ) peut être utilisé est un , b, d de l'ordre peut être ajustée. = 2 et peut être en panne, par exemple. 1 = A et B = 2 et C = 3 pour établir (a, b, c) dans les index de commande, optimiseur requête MySQL vous aidera à identifier peut être optimisée pour former l'indice 3 essayez de distinguer la colonne sélectionnée comme l'indice élevé, l'équation de la discrimination COUNT (DISTINCT COL) / COUNT (* ), la proportion de champ de répétition n'est pas représenté, le moins le nombre d'enregistrements de la plus grande proportion de notre scannée, la discrimination clé unique 1, et certains, le sexe est de 0 champs peut, face à la grande discrimination de données que quelqu'un peut demander, quelle est l'expérience de pourcentage , ? En utilisant différents scénarios, cette valeur est difficile à déterminer, en général nous avons besoin de joindre les champs sont nécessaires pour être de 0,1 ou plus, à savoir une moyenne de 10 dossiers de balayage 4. participer à la colonne d'index d'évaluation, la colonne reste « propre », comme FROM_UNIXTIME (create_time) = « 29/05/2014« Vous ne pouvez pas utiliser l'index, la raison est très simple, b + valeurs de champ sont stockées dans les données d'arbres dans le tableau, mais une recherche, vous devez utiliser tous les éléments fonctionnent pour comparer, le coût apparemment trop. Par conséquent, la déclaration doit être écrite comme create_time = UNIX_TIMESTAMP ( '29/05/2014 ); 5. L'indice élargi autant que possible, de ne pas créer un nouvel index. Par exemple, la table a un index maintenant à ajouter (a, b) l'indice, alors que vous devez modifier l'index d' origine