Comment améliorer la performance de l'INSERT sur une très grande table MySQL

Je suis en train de travailler sur une grande base de données MySQL et j'ai besoin d'améliorer la performance de l'INSERT sur une table spécifique. Celui-ci contient environ 200 Millions de lignes et de sa structure est comme suit:

(un peu le principe: je ne suis pas un expert base de données, donc le code que j'ai écrit, peut être fondée sur de mauvaises fondations. Merci de m'aider à comprendre mes erreurs 🙂 )

CREATE TABLE IF NOT EXISTS items (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(200) NOT NULL,
    key VARCHAR(10) NOT NULL,
    busy TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL,

    PRIMARY KEY (id, name),
    UNIQUE KEY name_key_unique_key (name, key),
    INDEX name_index (name)
) ENGINE=MyISAM
PARTITION BY LINEAR KEY(name)
PARTITIONS 25;

Chaque jour, je reçois de nombreux fichiers csv dans lequel chaque ligne est composée par la paire "nom;la clé", j'ai donc à analyser ces fichiers (ajout de valeurs created_at et updated_at pour chaque ligne) et insérer les valeurs dans mon tableau. Dans celui-ci, la combinaison "nom" et "clé" DOIT être UNIQUE, donc j'ai mis en place l'insert de la procédure comme suit:

CREATE TEMPORARY TABLE temp_items (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(200) NOT NULL, 
    key VARCHAR(10) NOT NULL, 
    busy TINYINT(1) NOT NULL DEFAULT 1,  
    created_at DATETIME NOT NULL, 
    updated_at DATETIME NOT NULL,  
    PRIMARY KEY (id) 
    ) 
ENGINE=MyISAM;

LOAD DATA LOCAL INFILE 'file_to_process.csv' 
INTO TABLE temp_items
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"' 
(name, key, created_at, updated_at); 

INSERT INTO items (name, key, busy, created_at, updated_at) 
(
    SELECT temp_items.name, temp_items.key, temp_items.busy, temp_items.created_at, temp_items.updated_at 
    FROM temp_items
) 
ON DUPLICATE KEY UPDATE busy=1, updated_at=NOW();

DROP TEMPORARY TABLE temp_items;

Le code ci-dessus me permet d'atteindre mon but, mais, pour terminer l'exécution, il emploie environ 48 heures, ce qui est un problème.
Je pense que cette mauvaise performance sont causés par le fait que le script doit vérifier sur une très grande table (200 Millions de lignes) et pour chaque insertion que la paire "nom;la clé est unique.

Comment puis-je améliorer les performances de mon script?

Merci à tous à l'avance.

InformationsquelleAutor jbdotdev | 2013-08-03