Maison >titres >Mysql est une utilisation incontournable pour le développement PHP. Alors, connaissez-vous la différence entre MyISAM et InnoDB dans Mysql ?

Mysql est une utilisation incontournable pour le développement PHP. Alors, connaissez-vous la différence entre MyISAM et InnoDB dans Mysql ?

PHP中文网
PHP中文网original
2018-04-09 17:07:462159parcourir

Différences de composition :

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

.frm stocke les définitions de table.

L'extension du fichier de données est .MYD (MYData).

L'extension du fichier d'index est .MYI (MYIndex).

Les ressources basées sur le disque sont le fichier de données de l'espace table InnoDB et son fichier journal. 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
Traitement des transactions :

La table de type MyISAM met l'accent sur les performances et ses temps d'exécution sont plus rapides que le type InnoDB, 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

Opérations SELECT UPDATE, INSERT, Supprimer

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

1 Si vos données effectuent un grand nombre d'INSERT ou UPDATE, pour des raisons de performances, vous devriez Lorsque vous utilisez la table InnoDB

2.DELETE FROM table, InnoDB ne recréera pas la table, mais la supprimera ligne par ligne.

3.L'opération LOAD TABLE FROM MASTER ne fonctionne pas pour InnoDB La solution consiste d'abord à changer la table InnoDB en table MyISAM, à importer les données puis à la changer en table InnoDB, mais pour l'InnoDB supplémentaire. les fonctionnalités utilisées (Par exemple, clés étrangères) les tables ne sont pas applicables

Opérations sur AUTO_INCREMENT

Traitement interne d'une colonne AUTO_INCREMEN par table.

MyISAM met automatiquement à jour cette colonne pour les opérations INSERT et UPDATE. Cela rend les colonnes AUTO_INCREMENT plus rapides (au moins 10 %). Une fois la valeur en haut de la séquence supprimée, elle ne peut plus être utilisée. (Lorsque la colonne AUTO_INCREMENT est définie comme dernière colonne d'un index multi-colonnes, il est possible de réutiliser des valeurs supprimées du haut de la séquence).

La valeur AUTO_INCREMENT peut être réinitialisée avec ALTER TABLE ou myisamch

Pour les champs de type AUTO_INCREMENT, InnoDB doit contenir un index avec uniquement ce champ, mais dans la table MyISAM, il peut être établi avec d'autres champs Index union

Gestion de l'auto_increment meilleure et plus rapide

Si vous spécifiez une colonne AUTO_INCREMENT pour une table, le handle de table InnoDB dans le dictionnaire de données contient un compteur appelé compteur d'auto-incrémentation, qui est utilisé pour attribuer une nouvelle valeur à la colonne.

Le compteur à incrémentation automatique est uniquement stocké dans la mémoire principale, pas sur le disque

Pour l'implémentation de l'algorithme de cette calculatrice, veuillez vous référer à

Comment la colonne AUTO_INCREMENT est utilisée dans InnoDB Le nombre spécifique de lignes dans la table de travail

select count(*) from table, MyISAM lit simplement le nombre de lignes enregistrées. Notez que lorsque l'instruction count(*) contient la condition Where, les opérations. des deux tables sont identiques


InnoDB n'enregistre pas le nombre spécifique de lignes dans la table, c'est-à-dire que lors de l'exécution de select count(*) from table, InnoDB doit analyser la table entière pour calculer combien de lignes il y a

Verrouillage

Le verrouillage de la table


fournit un verrouillage des lignes (verrouillage au niveau de la ligne) et fournit une lecture non verrouillable

SELECT cohérents avec le type Oracle 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, par exemple, mettre à jour l'ensemble de tables num=1 où le nom est comme ". %aaa% »


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