Bonjour,
J'ai une table de volumétrie importante (100 millions de lignes, 4Go en stockage InnoDB) au regard de la machine qui la gère (1Go de RAM).
J'ai une clé primaire sur deux colonnes de types INT (chaque ligne est composée de 3 INT et 1 DATE).
Le problème c'est que la génération de cet index est très très long.
J'aimerais savoir s'il y avait des moyen d'optimiser sa génération. Pour l'instant, j'ai fait un load data infile dans une table qui ne définit pas la clé primaire (25 minutes pour l'import). Si je rajoute la clé primaire au bout de 3 heures ce n'est pas fini.
J'ai fait des test sur une portion des données et j'ai constaté que le temps création de cet index est en O(n²). Soit pour ajouter l'index d'une ligne, il doit parcourir toutes les autres. Ca me semble très étrange.
Peut-on faire quelque chose pour accélérer cela? Augmenter des buffers en mémoire? Supprimer des vérification de contraintes inutiles?
Merci si vous avez des idées.
PS : J'ai remarquer que quand on ajoute une contrainte d'unicité sur le couple de la clé, la génération initiale de l'index prend beaucoup de temps, mais si on le supprime et qu'on le recrée, c'est beaucoup plus rapide grâce à cette clause d'unicité. Comment faire pour que ce soit rapide dès la première création, i.e. dire à MySQL de me croire quand je dis que c'est unique.
Partager