Avant de choisir MyISAM ou InnoDB, vous devrez examiner les deux moteurs de stockage en fonction de la façon dont chaque cache
MyISAM
Lors de la lecture, les index d'une table MyISAM peuvent être lus une fois à partir du fichier .MYI et chargés dans le cache de clés MyISAM (tel que dimensionné par key_buffer_size ). Comment accélérer la lecture du .MYD d'une table MyISAM? Avec ça:
ALTER TABLE mytable ROW_FORMAT=Fixed;
J'ai écrit à ce sujet dans mes précédents articles
InnoDB
OK, et InnoDB? InnoDB effectue-t-il des E / S disque pour les requêtes? Étonnamment, oui! Vous pensez probablement que je suis fou de dire cela, mais c'est absolument vrai, même pour les requêtes SELECT . À ce stade, vous vous demandez probablement "Comment diable InnoDB fait-il des E / S disque pour les requêtes?"
Tout cela remonte à InnoDB étant un moteur de stockage transactionnel conforme à ACID . Pour qu'InnoDB soit transactionnel, il doit prendre en charge l'entrée I
in ACID
, qui est l'isolement. La technique pour maintenir l'isolement des transactions se fait via MVCC, Multiversion Concurrency Control . En termes simples, InnoDB enregistre à quoi ressemblent les données avant que les transactions tentent de les modifier. Où cela est-il enregistré? Dans le fichier d'espace disque logique du système, mieux connu sous le nom ibdata1. Cela nécessite des E / S disque .
COMPARAISON
Étant donné qu'InnoDB et MyISAM effectuent des E / S disque, quels facteurs aléatoires déterminent qui est le plus rapide?
- Taille des colonnes
- Format de colonne
- Jeux de caractères
- Plage de valeurs numériques (nécessitant des INT suffisamment grands)
- Rangées divisées en blocs (chaînage de lignes)
- Fragmentation des données causée par
DELETEs
etUPDATEs
- Taille de la clé primaire (InnoDB a un index clusterisé, nécessitant deux recherches de clé)
- Taille des entrées d'index
- la liste continue...
ÉPILOGUE
Ainsi, dans un environnement de lecture intensive, il est possible qu'une table MyISAM avec un format de ligne fixe surpasse les lectures InnoDB du pool de tampons InnoDB s'il y a suffisamment de données écrites dans les journaux d'annulation contenus dans ibdata1 pour prendre en charge le comportement transactionnel imposées aux données InnoDB. Planifiez soigneusement vos types de données, vos requêtes et votre moteur de stockage. Une fois les données en croissance, il peut devenir très difficile de déplacer les données.
Au fait, j'ai écrit quelque chose comme ça il y a 5 jours: Comment attribuer une limite de mémoire pour mySQL?