Maison  >  Article  >  base de données  >  [MySQL] Moteur de stockage MySQL

[MySQL] Moteur de stockage MySQL

黄舟
黄舟original
2017-02-25 10:23:53982parcourir


Lors de la création d'une table, vous pouvez spécifier le type de la table, qui est le moteur de stockage de la table. Le moteur de stockage d'une table détermine la manière dont les données sont stockées et accessibles, ainsi que la manière dont les transactions sont stockées. Le moteur de stockage d'une table affecte grandement l'espace de stockage et la vitesse requis pour traiter les instructions SQL. Différents moteurs de stockage ont des caractéristiques différentes. Certains moteurs de stockage sont très adaptés au traitement de nombreuses instructions SELECT complexes, tandis que d'autres sont plus adaptés pour réaliser des mises à jour rapides.

InnoDB

InnoDB est le moteur transactionnel par défaut de MySQL et le moteur de stockage le plus important et le plus largement utilisé. Il est conçu pour gérer un grand nombre de transactions de courte durée. Les transactions de courte durée sont soumises normalement dans la plupart des cas et sont rarement annulées. Les performances d'InnoDB et ses fonctionnalités de récupération automatique en cas de crash le rendent populaire pour les besoins de stockage non transactionnel.

À moins qu'il n'y ait des raisons très particulières d'utiliser d'autres moteurs de stockage, le moteur InnoDB doit être prioritaire. ————"MySQL haute performance"

  • InnoDB utilise MVCC pour prendre en charge une simultanéité élevée et implémente quatre niveaux d'isolation standard. Son niveau par défaut est REPEATABLE READ et la stratégie de verrouillage des espaces empêche les lectures fantômes.

  • InnoDB indique que

  • basé sur un index clusterisé prend en charge les contraintes de clé étrangère.

  • Prend en charge l'ajout automatique de l'attribut de colonne AUTO_INCREMENT.

  • Affaires. Le moteur de stockage InnoDB est un moteur de stockage MySQL standard qui prend en charge les transactions.

  • Il n'est pas nécessaire de copier l'intégralité des données de la table lors de la suppression ou de l'ajout d'un index.

InnoDB a apporté de nombreuses optimisations internes, notamment une lecture anticipée prévisible lors de la lecture des données à partir du disque, et un index de hachage adaptatif qui peut créer automatiquement un index de hachage en mémoire pour accélérer les opérations, et. un tampon d'insertion qui accélère les opérations d'insertion.

Les tables InnoDB sont construites sur la base d'index clusterisés. La structure d'index d'InnoDB est très différente des autres moteurs MySQL. Les index clusterisés offrent des performances élevées pour les requêtes de clé primaire. Cependant, l'index secondaire doit contenir la colonne de clé primaire, donc si la colonne de clé primaire est grande, tous les autres index le seront. Par conséquent, s’il existe de nombreux index sur la table, la clé primaire doit être aussi petite que possible.

MyISAM

MyISAM fournit un grand nombre de fonctionnalités, notamment l'indexation de texte intégral, la compression, les fonctions spatiales (SIG), etc., mais MyISAM ne prend pas en charge les transactions et les verrous au niveau des lignes, et il ne fait aucun doute que l'inconvénient est qu'il ne peut pas être restauré en toute sécurité après un crash. Dans MySQL 5.1 et les versions précédentes, MyISAM est le moteur de stockage par défaut. C'est précisément à cause de ce moteur que même si MySQL prend en charge les transactions depuis longtemps, MySQL reste une base de données non transactionnelle dans le concept de nombreuses personnes.

  • MyISAM verrouille la table entière, pas les lignes.

  • Prend en charge l'indexation en texte intégral.

  • Prend en charge les tableaux compressés. Les tables compressées ne peuvent pas être modifiées et peuvent réduire considérablement l'utilisation de l'espace disque, réduisant ainsi les opérations d'E/S disque et améliorant ainsi les performances des requêtes.

Stockage

MyISAM stockera la table dans deux fichiers : le fichier de données et le fichier d'index, avec respectivement les extensions .MYD et .MYI. Les tables MyISAM peuvent contenir des lignes dynamiques ou statiques. MySQL décidera quel format de ligne utiliser en fonction de la définition de la table.
Dans MySQL5.0, si la table MyISAM comporte des lignes de longueur variable, la configuration par défaut ne peut gérer que 256 To de données.

Caractéristiques

En tant que l'un des premiers moteurs de stockage de MySQL, il y a encore quelques fonctionnalités.

Verrouillage et concurrence – Verrouillage de table

MyISAM verrouille la table entière, pas les lignes. Lors de la lecture, des verrous partagés seront ajoutés à toutes les tables qui doivent être lues, et des verrous exclusifs seront ajoutés aux tables lors de l'écriture. Cependant, même si la table contient des requêtes de lecture, de nouveaux enregistrements peuvent également être insérés dans la table (insertion simultanée).

Réparation

Pour les tables MyISAM, MySQL peut effectuer des opérations d'inspection et de maintenance manuellement ou automatiquement, mais la réparation mentionnée ici est un concept différent de la récupération de transaction et de la récupération après crash.

Fonctionnalités d'index

Pour les tables MyISAM, même les champs longs tels que BLOB et TEXT peuvent créer des index basés sur leurs 500 premiers caractères. MyISAM prend également en charge l'indexation de texte intégral, qui est un index créé sur la base de la segmentation des mots et peut prendre en charge des requêtes complexes.
Mise à jour retardée des clés d'index
Lors de la création d'une table MyISAM, si l'option DELAY_KEY_WRITE est spécifiée, les données d'index modifiées ne seront pas écrites sur le disque immédiatement lorsque chaque modification est terminée.
 

Performances MyISAM

Le moteur MyISAM est conçu pour être simple et les données sont stockées dans un format compact, les performances dans certains scénarios sont donc très bonnes. Cependant, l’existence de verrous de table a un impact important sur les performances.

Moteur d'archives

Le moteur de stockage d'archives prend uniquement en charge INSERT et SELECT. Le moteur d'archive met en cache toutes les écritures et utilise zlib pour compresser les insertions, il nécessite donc moins d'E/S disque que les tables MyISAM. Mais chaque requête SELECT doit effectuer une analyse complète de la table. Par conséquent, les tables d'archives conviennent aux applications de collecte de journaux et de données, qui nécessitent souvent des analyses complètes des tables pour l'analyse des données.

Le moteur d'archive prend en charge les verrous au niveau des lignes et les tampons dédiés, ce qui permet de réaliser des insertions à haute concurrence. Archive empêchera d'autres SELECT de s'exécuter jusqu'à ce que toutes les lignes qui existent dans la table soient renvoyées avant le démarrage d'une requête pour obtenir des lectures cohérentes. De plus, des insertions par lots sont également implémentées et sont invisibles pour les opérations de lecture jusqu'à ce qu'elles soient terminées. Ce mécanisme imite certaines fonctionnalités des transactions et de MVCC, mais le moteur d'archive n'est pas un moteur transactionnel, mais un moteur optimisé pour l'insertion et la compression à grande vitesse.

Moteur de stockage CSV

Ce moteur peut traiter des fichiers CSV ordinaires en tant que tables MySQL, mais cette table ne prend pas en charge les index. Il vous suffit de copier le fichier CSV dans le répertoire de données du moteur de stockage CSV, et il peut être ouvert et utilisé en utilisant les règles répertoriées dans MySQL.

Moteur de mémoire

Si vous avez besoin d'accéder rapidement aux données et que les données ne seront pas modifiées ou perdues après le redémarrage, alors l'utilisation des tables de mémoire est très utile. Les tables de mémoire sont un ordre de grandeur plus rapides que les tables MyISAM car toutes les données sont stockées en mémoire et aucune opération d'E/S disque n'est requise. La structure de la table Mémoire sera conservée après le redémarrage, mais les données seront perdues.

  • prend en charge l'index de hachage, l'opération de recherche est donc très rapide.

  • est un verrou au niveau de la table, les performances d'écriture simultanées sont donc faibles.

  • ne prend pas en charge les colonnes de type BLOB ou TEXT, et la longueur de chaque ligne est fixe Même si varchar est spécifié, il sera converti en char dans le stockage réel.

Remarque

À moins que vous n'ayez besoin d'utiliser certaines fonctionnalités qu'InnoDB ne possède pas et qu'il n'y a pas d'autre moyen de le remplacer, vous devez donner la priorité au Moteur InnoDB—— "MySQL haute performance"

De plus, ce qui précède ne répertorie que certains moteurs de stockage couramment rencontrés, ce qui n'est pas exhaustif.

Lors de la création d'une table, vous pouvez spécifier le type de la table, qui est le moteur de stockage de la table. Le moteur de stockage d'une table détermine la manière dont les données sont stockées et accessibles, ainsi que la manière dont les transactions sont stockées. Le moteur de stockage d'une table affecte grandement l'espace de stockage et la vitesse requis pour traiter les instructions SQL. Différents moteurs de stockage ont des caractéristiques différentes. Certains moteurs de stockage sont très adaptés au traitement de nombreuses instructions SELECT complexes, tandis que d'autres sont plus adaptés pour réaliser des mises à jour rapides.

InnoDB

InnoDB est le moteur transactionnel par défaut de MySQL et le moteur de stockage le plus important et le plus largement utilisé. Il est conçu pour gérer un grand nombre de transactions de courte durée. Les transactions de courte durée sont soumises normalement dans la plupart des cas et sont rarement annulées. Les performances d'InnoDB et ses fonctionnalités de récupération automatique en cas de crash le rendent populaire pour les besoins de stockage non transactionnel.

À moins qu'il n'y ait des raisons très particulières d'utiliser d'autres moteurs de stockage, le moteur InnoDB doit être prioritaire. ————"MySQL haute performance"

  • InnoDB utilise MVCC pour prendre en charge une simultanéité élevée et implémente quatre niveaux d'isolation standard. Son niveau par défaut est REPEATABLE READ et la stratégie de verrouillage des espaces empêche les lectures fantômes.

  • InnoDB indique que

  • basé sur un index clusterisé prend en charge les contraintes de clé étrangère.

  • Prend en charge l'ajout automatique de l'attribut de colonne AUTO_INCREMENT.

  • Affaires. Le moteur de stockage InnoDB est un moteur de stockage MySQL standard qui prend en charge les transactions.

  • Il n'est pas nécessaire de copier l'intégralité des données de la table lors de la suppression ou de l'ajout d'un index.

InnoDB a apporté de nombreuses optimisations internes, notamment une lecture anticipée prévisible lors de la lecture des données à partir du disque, et un index de hachage adaptatif qui peut créer automatiquement un index de hachage en mémoire pour accélérer les opérations, et. un tampon d'insertion qui accélère les opérations d'insertion.

Les tables InnoDB sont construites sur la base d'index clusterisés. La structure d'index d'InnoDB est très différente des autres moteurs MySQL. Les index clusterisés offrent des performances élevées pour les requêtes de clé primaire. Cependant, l'index secondaire doit contenir la colonne de clé primaire, donc si la colonne de clé primaire est grande, tous les autres index le seront. Par conséquent, s’il existe de nombreux index sur la table, la clé primaire doit être aussi petite que possible.

MyISAM

MyISAM fournit un grand nombre de fonctionnalités, notamment l'indexation de texte intégral, la compression, les fonctions spatiales (SIG), etc., mais MyISAM ne prend pas en charge les transactions et les verrous au niveau des lignes, et il ne fait aucun doute que l'inconvénient est qu'il ne peut pas être restauré en toute sécurité après un crash. Dans MySQL 5.1 et les versions précédentes, MyISAM est le moteur de stockage par défaut. C'est précisément à cause de ce moteur que même si MySQL prend en charge les transactions depuis longtemps, MySQL reste une base de données non transactionnelle dans le concept de nombreuses personnes.

  • MyISAM verrouille la table entière, pas les lignes.

  • Prend en charge l'indexation en texte intégral.

  • Prend en charge les tableaux compressés. Les tables compressées ne peuvent pas être modifiées et peuvent réduire considérablement l'utilisation de l'espace disque, réduisant ainsi les opérations d'E/S disque et améliorant ainsi les performances des requêtes.

Stockage

MyISAM stockera la table dans deux fichiers : le fichier de données et le fichier d'index, avec respectivement les extensions .MYD et .MYI. Les tables MyISAM peuvent contenir des lignes dynamiques ou statiques. MySQL décidera quel format de ligne utiliser en fonction de la définition de la table.
Dans MySQL5.0, si la table MyISAM comporte des lignes de longueur variable, la configuration par défaut ne peut gérer que 256 To de données.

Caractéristiques

En tant que l'un des premiers moteurs de stockage de MySQL, il y a encore quelques fonctionnalités.

Verrouillage et concurrence – Verrouillage de table

MyISAM verrouille la table entière, pas les lignes. Lors de la lecture, des verrous partagés seront ajoutés à toutes les tables qui doivent être lues, et des verrous exclusifs seront ajoutés aux tables lors de l'écriture. Cependant, même si la table contient des requêtes de lecture, de nouveaux enregistrements peuvent également être insérés dans la table (insertion simultanée).

Réparation

Pour les tables MyISAM, MySQL peut effectuer des opérations d'inspection et de maintenance manuellement ou automatiquement, mais la réparation mentionnée ici est un concept différent de la récupération de transaction et de la récupération après crash.

Fonctionnalités d'index

Pour les tables MyISAM, même les champs longs tels que BLOB et TEXT peuvent créer des index basés sur leurs 500 premiers caractères. MyISAM prend également en charge l'indexation de texte intégral, qui est un index créé sur la base de la segmentation des mots et peut prendre en charge des requêtes complexes.
Mise à jour retardée des clés d'index
Lors de la création d'une table MyISAM, si l'option DELAY_KEY_WRITE est spécifiée, les données d'index modifiées ne seront pas écrites sur le disque immédiatement lorsque chaque modification est terminée.
 

Performances MyISAM

Le moteur MyISAM est conçu pour être simple et les données sont stockées dans un format compact, les performances dans certains scénarios sont donc très bonnes. Cependant, l’existence de verrous de table a un impact important sur les performances.

Moteur d'archives

Le moteur de stockage d'archives prend uniquement en charge INSERT et SELECT. Le moteur d'archive met en cache toutes les écritures et utilise zlib pour compresser les insertions, il nécessite donc moins d'E/S disque que les tables MyISAM. Mais chaque requête SELECT doit effectuer une analyse complète de la table. Par conséquent, les tables d'archives conviennent aux applications de collecte de journaux et de données, qui nécessitent souvent des analyses complètes des tables pour l'analyse des données.

Le moteur d'archive prend en charge les verrous au niveau des lignes et les tampons dédiés, ce qui permet de réaliser des insertions hautement concurrentes. Archive empêchera d'autres SELECT de s'exécuter jusqu'à ce que toutes les lignes qui existent dans la table soient renvoyées avant le démarrage d'une requête pour obtenir des lectures cohérentes. De plus, des insertions par lots sont également implémentées et sont invisibles pour les opérations de lecture jusqu'à ce qu'elles soient terminées. Ce mécanisme imite certaines fonctionnalités des transactions et de MVCC, mais le moteur d'archive n'est pas un moteur transactionnel, mais un moteur optimisé pour l'insertion et la compression à grande vitesse.

Moteur de stockage CSV

Ce moteur peut traiter des fichiers CSV ordinaires en tant que tables MySQL, mais cette table ne prend pas en charge les index. Il vous suffit de copier le fichier CSV dans le répertoire de données du moteur de stockage CSV, et il peut être ouvert et utilisé en utilisant les règles répertoriées dans MySQL.

Moteur de mémoire

Si vous avez besoin d'accéder rapidement aux données et que les données ne seront pas modifiées ou perdues après le redémarrage, alors l'utilisation des tables de mémoire est très utile. Les tables de mémoire sont un ordre de grandeur plus rapides que les tables MyISAM car toutes les données sont stockées en mémoire et aucune opération d'E/S disque n'est requise. La structure de la table Mémoire sera conservée après le redémarrage, mais les données seront perdues.

  • prend en charge l'index de hachage, l'opération de recherche est donc très rapide.

  • est un verrou au niveau de la table, les performances d'écriture simultanées sont donc faibles.

  • ne prend pas en charge les colonnes de type BLOB ou TEXT, et la longueur de chaque ligne est fixe Même si varchar est spécifié, il sera converti en char dans le stockage réel.

Remarque

À moins que vous n'ayez besoin d'utiliser certaines fonctionnalités qu'InnoDB ne possède pas et qu'il n'y a pas d'autre moyen de le remplacer, vous devez donner la priorité au Moteur InnoDB—— "MySQL haute performance"

De plus, ce qui précède ne répertorie que certains moteurs de stockage couramment rencontrés, ce qui n'est pas exhaustif.

Ce qui précède est le contenu du moteur de stockage [MySQL] 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