2010-04-26 8 views
0

J'ai le schéma tableau suivant:Comment puis-je optimiser l'importation de cet ensemble de données dans mysql?

CREATE TABLE `alexa` (
    `id` int(10) unsigned NOT NULL, 
    `rank` int(10) unsigned NOT NULL, 
    `domain` varchar(63) NOT NULL, 
    `domainStatus` varchar(6) DEFAULT NULL, 
    PRIMARY KEY (`rank`), 
    KEY `domain` (`domain`), 
    KEY `id` (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

Il faut plusieurs minutes pour importer les données. Pour moi, cela semble plutôt lent car nous ne parlons que d'un million de lignes de données.

Que puis-je faire pour optimiser l'insertion de ces données? (utilisez déjà des clés désactivées)

+0

étrange que vous avez une colonne 'id' mais ce n'est pas la clé primaire. –

Répondre

0

Utilisez LOAD DATA INFILE ou l'outil de ligne de commande équivalent mysqlimport. Cela peut être 20 fois plus rapide que toute autre méthode.

Vous pouvez également lire Speed of INSERT Statements dans le manuel MySQL. Cela a beaucoup de conseils pour améliorer les performances d'insertion en vrac. Vous ne dites pas grand-chose sur comment vous insérez actuellement des données (en plus de désactiver les clés), il est donc difficile de recommander quelque chose de plus spécifique sur la façon dont vous pouvez améliorer cela. Par exemple, quel langage de codage utilisez-vous? Utilisez-vous des requêtes préparées?

+0

J'utilise PHP et non, n'utilisant pas de requêtes préparées. Dunno pourquoi je n'ai pas pensé à ce LOL. – GeoffreyF67

+0

J'ai un script qui charge le vidage de données XML Stack Overflow dans une base de données MySQL. J'utilise PHP et PDO, avec des requêtes préparées. Cela prend quelques minutes à charger. J'utilise mysqlimport pour normaliser les tags par poste, et cela fonctionne incroyablement rapidement. –

0

journal Assurez-bin est désactivé si vous n'utilisez pas la réplication:

set sql_log_bin=off; 
Questions connexes