"Réparer par tri" utilise la routine filesort, qui à son tour crée plusieurs fichiers temporaires (généralement) dans votre tmpdir.
Si votre tmpdir n'a pas assez d'espace pour eux, il reviendra à "Réparer par keycache". C'est extrêmement mauvais car c'est beaucoup plus lent ET crée des index moins optimaux.
Il existe d'autres conditions mais je ne les ai pas identifiées.
Déterminer la taille de tmpdir dont vous avez besoin pour filesort() n'est pas trivial; le format des données stockées dans le tampon de tri de fichiers n'est pas le même que celui des fichiers MYD, il utilise généralement beaucoup plus d'espace.
Donc, si votre tmpdir pointe vers un petit /tmp (ou tmpfs), vous voudrez peut-être le changer en un /var/tmp plus grand - si cela existe.