2 votes

Est-ce que les tables InnoDB ou MyISAM offrent de meilleures performances d'insertion dans MySQL 5.1?

Je dois insérer des lignes aussi rapidement que possible dans une base de données avec des tables fraîchement créées et sans index. Je regarde environ 20 millions de lignes, ce qui n'est pas énorme. Est-ce que les tables InnoDB ou MyISAM me donneraient les meilleures performances?

Évidemment, il y a d'autres astuces de chargement en lot que je regarde aussi.

6voto

InnoDB est transactionnel, donc MyISAM, qui ne se soucie pas des écritures atomiques, sera plus rapide.

2voto

LL Phillips Points 21

MyISAM sera plus rapide que InnoDB pour le cas que vous décrivez. Si vous cherchez simplement à importer des données dans MySQL aussi rapidement que possible, consultez LOAD DATA INFILE.

2voto

Adam Points 11

Voici quelque chose que personne n'a encore mentionné.

Si vous convertissez le format de ligne des tables MyISAM de DYNAMIC (par défaut) en FIXED, vous pouvez augmenter les performances globales du SQL sur la table d'au moins 20%.

Conformément aux pages 71-73 de MySQL Database Design and Tuning (ISBN 0-672-32756-1), il suffit d'exécuter la commande suivante sur n'importe quelle table MyISAM :

ALTER TABLE tblname ROW_FORMAT=FIXED;

et vous obtiendrez un bon coup de pouce de performances sur vos requêtes contre cette table.

L'exemple donné dans le livre indiquait que les requêtes sur une table MyISAM à lignes dynamiques prenaient 50% de plus de temps pour s'exécuter que sur une table MyISAM à lignes fixes. Si vous prenez ensuite la table MyISAM à lignes fixes et la compressez en utilisant myisampack, la table MyISAM à lignes fixes compressée interroge 10% plus rapidement que la table MyISAM à lignes fixes non compressée.

Il y a un inconvénient majeur à cette approche - les tables MyISAM à lignes fixes sont au moins deux fois plus grandes que leurs homologues MyISAM à lignes dynamiques. Ainsi, si vous pouviez vous permettre de sacrifier de la vitesse pour de l'espace, vous devriez opter pour les tables MyISAM à lignes fixes. Ensuite, toutes les requêtes seront plus rapides sans aucun changement de structure de table supplémentaire.

Vous pourriez également exécuter la commande ALTER TABLE tblname ROW_FORMAT=FIXED; sur une table InnoDB également. Si vous le faisiez pour des tables dans les moteurs de stockage InnoDB et MyISAM, vous ne disposeriez toujours pas d'un terrain de jeu équitable. L'avantage reviendrait toujours à MyISAM. La raison est que toutes les recherches d'index non uniques doivent traverser un index non clusterisé, puis traverser l'index clusterisé pour accéder à l'identifiant de ligne. Les index MyISAM ne passent que par un seul index au maximum.

Je ne fais pas que conjecturer. Il y a environ 4 ans, j'ai personnellement pris une table de 2 Go, exécuté la commande ALTER TABLE, et l'ai agrandie à 3,7 Go. Toutes les requêtes résultantes ont en moyenne été 20% plus rapides qu'elles ne l'étaient avant de modifier le format de ligne.

Je recommande vivement de faire cela pour tous les MyISAM et InnoDB si vous souhaitez augmenter les performances et si vous ne vous souciez pas de l'augmentation de la taille des fichiers.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X