Maison > Article > base de données > Quelles sont les différences entre les moteurs de stockage MySQL ?
La différence entre les moteurs de stockage dans MySQL : en prenant Innodb et myisam comme exemple, le premier prend en charge les transactions mais pas le second ; le premier met l'accent sur la polyvalence et prend en charge des fonctions plus étendues, tandis que le second se concentre principalement sur les performances ; ne prend pas en charge l'indexation en texte intégral, et cette dernière prend en charge l'indexation en texte intégral, etc.
MySQL prend en charge ici plusieurs moteurs de stockage. moteurs. Innodb, myisam
INNODB
Implémentation de l'index INNODB
La même chose que MyISAM est qu'InnoDB utilise également B+Tree Cette structure de données est utilisée pour implémenter l'index B-Tree. La grande différence est que le moteur de stockage InnoDB utilise la méthode de stockage de données « index clusterisé » pour implémenter l'index B-Tree. Ce que l'on appelle « l'agrégation » signifie que les lignes de données et les valeurs clés adjacentes sont stockées ensemble de manière compacte. .Notez qu'InnoDB ne peut que Les enregistrements d'une page feuille (16 Ko) sont agrégés (c'est-à-dire que l'index clusterisé satisfait une certaine plage d'enregistrements), de sorte que les enregistrements contenant des valeurs de clé adjacentes peuvent être éloignés les uns des autres.
Dans InnoDB, la table est appelée table organisée par index. InnoDB construit un B+Tree en fonction de la clé primaire (s'il n'y a pas de clé primaire, un index unique et non vide sera sélectionné à la place. Si Sans un tel index, InnoDB définira implicitement une clé primaire comme un index clusterisé), et les pages feuilles stockent les données d'enregistrement de ligne de la table entière. Les nœuds feuilles de l'index clusterisé peuvent également être appelés pages de données et non-feuilles. les pages peuvent être considérées comme un index clairsemé de pages feuilles.
La figure suivante illustre l'implémentation de l'index clusterisé InnoDB et reflète également la structure d'une table innoDB. On peut voir que dans InnoDB, l'index de clé primaire et les données sont intégrés et non séparés.
Cette méthode d'implémentation donne à InnoDB des performances ultra-élevées pour la récupération par clé primaire. Vous pouvez choisir délibérément un index clusterisé, tel qu'une table de courrier, et vous pouvez choisir l'ID utilisateur pour agréger les données. De cette façon, il vous suffit de lire un petit nombre de pages de données consécutives à partir du disque pour obtenir tous les courriers d'un. utilisateur avec un certain identifiant, évitant ainsi le besoin d'E/S aléatoires passées à lire des pages dispersées.
InnoDB est une opération d'E/S Innodb utilise MVCC pour lire et écrire afin de prendre en charge une concurrence élevée.
Analyse complète de la table
Lorsque InnoDB effectue une analyse complète de la table, elle n'est pas efficace car InnoDB ne lit pas réellement de manière séquentielle. Dans la plupart des cas, il lit Pick de manière aléatoire. . Lors d'une analyse complète de la table, InnoDB analyse les pages et les lignes dans l'ordre des clés primaires. Cela s'applique à toutes les tables InnoDB, y compris les tables fragmentées. Si la table des pages de clé primaire (la table des pages qui stocke les clés primaires et les lignes) n'est pas fragmentée, une analyse complète de la table est assez rapide car l'ordre de lecture est proche de l'ordre de stockage physique. Mais lorsque la page de clé primaire est fragmentée, l'analyse deviendra très lente
Verrouillage au niveau de la ligne
Fournit le verrouillage des lignes (verrouillage au niveau de la ligne), fourni avec Oracle Lecture non verrouillable de type cohérent dans les SELECT De plus, le verrouillage des lignes de la table InnoDB n'est pas absolu. Si MySQL ne peut pas déterminer la plage à analyser lors de l'exécution d'une instruction SQL, la table InnoDB verrouillera également la table entière. tels que
update table set num=1 where name like “%aaa%”
MYISAM
Implémentation des index MyISAM
Chaque MyISAM est stocké sous forme de trois fichiers sur le disque. Le nom du premier fichier commence par le nom de la table et l'extension indique le type de fichier. Le fichier d'index MyISAM [.MYI (MYIndex)] et le fichier de données [.MYD (MYData)] sont séparés. Le fichier d'index enregistre uniquement le pointeur (emplacement physique) de la page où se trouve l'enregistrement. ces adresses, puis la page est lue. La ligne indexée. Jetons d'abord un coup d'œil au diagramme de structure
L'image ci-dessus illustre bien que les feuilles de l'arbre enregistrent l'emplacement physique de la rangée correspondante. Grâce à cette valeur, le moteur de stockage peut interroger la table en douceur et obtenir une ligne complète d'enregistrements. Dans le même temps, chaque page feuille enregistre également un pointeur vers la page feuille suivante. Cela facilite la traversée de la plage des nœuds feuilles. Quant à l'index secondaire, il est implémenté dans le moteur de stockage MyISAM de la même manière que la figure ci-dessus. Cela montre également que la méthode d'indexation de MyISAM est "non clusterisée", ce qui contraste avec "l'index clusterisé" d'Innodb
.MyISAM lira l'index en mémoire par défaut et fonctionnera directement en mémoire
Verrouillage au niveau de la table
Résumé : Innodb met l'accent sur la polyvalence et la comparaison des supports pris en charge ; Fonctions étendues Beaucoup, myisam se concentre principalement sur les performances
Différences
1. InnoDB prend en charge les transactions, mais MyISAM ne le fait pas. Pour InnoDB, chaque langage SQL est encapsulé dans une transaction. par défaut et automatiquement soumis. , cela affectera la vitesse, il est donc préférable de placer plusieurs instructions SQL entre start et commit pour former une transaction
2. lié à l'index et doit être Il doit y avoir une clé primaire, et l'indexation via la clé primaire est très efficace. Cependant, l'index auxiliaire nécessite deux requêtes, d'abord pour interroger la clé primaire, puis pour interroger les données via la clé primaire. Par conséquent, la clé primaire ne doit pas être trop grande, car si la clé primaire est trop grande, les autres index le seront également. MyISAM est un index non clusterisé, les fichiers de données sont séparés et l'index enregistre le pointeur du fichier de données. Les index de clé primaire et les index secondaires sont indépendants.
3. InnoDB n'enregistre pas le nombre spécifique de lignes dans la table. Lors de l'exécution de select count(*) from table, une analyse complète de la table est requise. MyISAM utilise une variable pour enregistrer le nombre de lignes dans la table entière. Lors de l'exécution de l'instruction ci-dessus, il vous suffit de lire la variable, ce qui est très rapide
4. , alors que MyISAM prend en charge l'index de texte intégral, MyISAM est plus élevé
;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!