Maison  >  Article  >  base de données  >  Analyse comparative d'InnoDB et MyISAM dans MySQL

Analyse comparative d'InnoDB et MyISAM dans MySQL

WBOY
WBOYavant
2023-06-02 16:16:351430parcourir

Comparaison entre InnoDB et MyISAM

1. Structure de stockage

MyISAM : Chaque MyISAM est stocké sous forme de trois fichiers sur le disque. Il s'agit des fichiers de définition de table, des fichiers de données et des fichiers d'index. Le nom du premier fichier commence par le nom de la table et l'extension indique le type de fichier. Les fichiers .frm stockent les définitions de table. L'extension du fichier de données est .MYD (MYData). L'extension du fichier d'index est .MYI (MYIndex).

InnoDB : Toutes les tables sont stockées dans le même fichier de données (ou dans plusieurs fichiers, ou dans des fichiers d'espace table indépendants). La taille de la table InnoDB n'est limitée que par la taille du fichier du système d'exploitation, généralement 2 Go. .

2. Espace de stockage

MyISAM : MyISAM prend en charge trois formats de stockage différents : table statique (par défaut, mais notez que la fin des données ne peut pas S'il y a des espaces, ils seront supprimés), les tableaux dynamiques et les tableaux compressés. Une fois la table créée et les données importées, aucune opération de modification ne sera effectuée. Vous pouvez utiliser des tables compressées pour réduire considérablement l'utilisation de l'espace disque.

InnoDB : Nécessite plus de mémoire et de stockage, il établira son propre pool de tampons dédié dans la mémoire principale pour la mise en cache des données et des index.

3. Portabilité, sauvegarde et récupération

MyISAM : Les données sont stockées sous forme de fichiers, donc transfert de données multiplateforme La réunion est très pratique. Vous pouvez effectuer des opérations sur une table individuellement pendant la sauvegarde et la restauration.

InnoDB : La solution gratuite peut être de copier des fichiers de données, de sauvegarder le binlog, ou d'utiliser mysqldump, ce qui est relativement pénible lorsque le volume de données atteint des dizaines de G.

4. Prise en charge des transactions

MyISAM : L'accent est mis sur les performances, chaque requête est atomique et ses temps d'exécution sont supérieurs à ceux d'InnoDB. tapez Fast, mais ne fournit pas de prise en charge des transactions.

InnoDB : Fournit une prise en charge des transactions, des clés étrangères et d'autres fonctions de base de données avancées. Tables sécurisées pour les transactions (conformes à l'ACID) avec capacités de transaction (validation), de restauration (rollback) et de récupération après incident.

5, AUTO_INCREMENT

MyISAM : Peut créer un index conjoint avec d'autres champs. La colonne à croissance automatique du moteur doit être un index. S'il s'agit d'un index combiné, la colonne à croissance automatique n'a pas besoin d'être la première colonne. Elle peut être triée et incrémentée en fonction des colonnes précédentes.

InnoDB : InnoDB doit contenir un index avec uniquement ce champ. La colonne à croissance automatique du moteur doit être un index, et s'il s'agit d'un index composite, elle doit également être la première colonne de l'index composite.

6. Différences de verrouillage de table

MyISAM : seuls les verrous au niveau de la table sont pris en charge. Lorsque l'utilisateur utilise la table myisam, sélectionnez, mettez à jour. , delete, L'instruction insert verrouille automatiquement la table. Si la table verrouillée répond à la concurrence d'insertion, de nouvelles données peuvent être insérées à la fin de la table.

InnoDB : La prise en charge des transactions et des verrous au niveau des lignes est la fonctionnalité la plus importante d'InnoDB. Les verrous de ligne améliorent considérablement les performances des opérations simultanées multi-utilisateurs. Cependant, le verrouillage de ligne d'InnoDB n'est valable que sur la clé primaire de WHERE. Toute clé non primaire WHERE verrouillera la table entière.

7. Index de texte intégral

MyISAM : prend en charge l'index de texte intégral de type FULLTEXT

InnoDB : ne prend pas en charge l'indexation de texte intégral de type FULLTEXT, mais innodb peut utiliser le plug-in sphinx pour prendre en charge l'indexation de texte intégral, et l'effet est meilleur.

8. Clé primaire de table

MyISAM : permet aux tables sans index ni clés primaires d'exister.

InnoDB : S'il n'y a pas de clé primaire ou d'ensemble d'index unique non vide, une clé primaire de 6 octets (invisible pour l'utilisateur) sera automatiquement générée. Les données font partie de l'index principal, et l'index supplémentaire enregistre la valeur principale de l'index.

9. Le nombre spécifique de lignes dans le tableau

MyISAM : Enregistrez le nombre total de lignes dans le tableau, si vous sélectionnez le nombre ( ) du tableau ; retirera directement la valeur.

InnoDB : Le nombre total de lignes dans la table n'est pas enregistré. Si vous utilisez select count(*) from table, il parcourra toute la table, ce qui consomme beaucoup d'argent. Cependant, après avoir ajouté la condition wehre, myisam Il est traité de la même manière qu'innodb.

10. Opération CRUD

MyISAM : Si vous effectuez un grand nombre de SELECT, MyISAM est un meilleur choix.

InnoDB : Si vos données effectuent un grand nombre d'INSERT ou de UPDATE, vous devez utiliser une table InnoDB pour des raisons de performances.

11. Clé étrangère

MyISAM : non pris en charge

InnoDB : pris en charge

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer