Questo è più veloce di concat + substring routine.
select substring(MD5(RAND()),1,20);
Dato che ho provato a inserire 1 milione di dati casuali, md5 la routine consuma solo 1/4 (ancora meno) tempo di concat + substring routine;
Il problema è che una stringa md5 contiene solo 32 caratteri, quindi se ne hai bisogno di una più lunga dovresti generare manualmente più stringhe md5 e substring da solo.