Nous avons 14 Go de CSV de 138 millions de lignes totales. J'ai d'abord importé cela dans une table mysql avec Innodb, puis j'ai essayé avec Myisam. Dans les deux cas, une simple sélection de la clé primaire (qui est juste une autocrated int) a pris 6-7 secondes, bien que Myisam était parfois un peu plus rapide à 5-6 secondes.
Nous n'avons besoin que d'écrire les données une fois et j'utilise MySQLIMPort. Dans cet esprit, comment puis-je améliorer la vitesse de la requête?
... Cela ne vaut rien que nous avons 2 concerts de RAM et tout est un tableau (et il doit rester de cette manière en raison de la nature des requêtes). Est-ce la meilleure performance que je Peut-être attendre compte tenu du matériel? Ou existe-t-il autre chose que je devrais essayer, comme la compression? Ou vraiment, j'ai besoin de beaucoup plus de RAM?
Si la table est beaucoup de champs de varchar, j'aimerais suggérer les suivants
Pour chaque table myisam que vous chargez, faites-le au préalable
ALTER TABLE mytable ROW_FORMAT=Fixed;
Cela augmentera les performances de la requête jusqu'à 15-30% sans changer quoi que ce soit d'autre. L'effet secondaire de faire cela a des tables plus grandes et des index plus gros.
J'ai des messages précédents à ce sujet:
May 10, 2011
: Quel est l'impact de la performance de l'utilisation de Char VS Varchar sur un champ de taille fixe? (Tradeoff # 2)Aug 12, 2011
: quel SGBD est bon pour les lectures super-rapides et une structure de données simple? (Par 3)Sep 20, 2011
: meilleur de myisam et innodbJan 03, 2012
: optimisé my.cnf pour serveur haut de gamme et occupé (sous la référence réplication )Si vous avez de nombreux index, vous pouvez augmenter RAM sur le serveur DB, puis tenter de précharger toutes les pages d'index MyISAM dans la mémoire tampon de clé.
Computer d'abord la taille d'un tampon de clé que vous souhaitez (en gigaoctets)
SELECT CEILIING(SUM(index_length)/POWER(1024,3)) SuggestedKeyBufferSize
FROM information_schema.tables
WHERE engine='MyISAM' AND table_schema NOT
IN ('information_schema','performance_schema','mysql');
Si SuggestedKeyBufferSize
peut être configuré pour le serveur DB, puis procédez comme suit (exemple 4G)
Étape 01) Définissez ceci dans /etc/my.cnf
[mysqld]
key_buffer_size=4G
Étape 02) Précharge tous les index MyISAM
Voir mon message sur la façon de faire ceci: MySQL Procédure chaude