Un ottimo post che gestisce diversi casi, da semplici, a lacune, a non uniformi con lacune.
http://jan.kneschke.de/projects/mysql/order- per randa/
Per i casi più generali, ecco come farlo:
SELECT name
FROM random AS r1 JOIN
(SELECT CEIL(RAND() *
(SELECT MAX(id)
FROM random)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 1
Ciò presuppone che la distribuzione degli id sia uguale e che possano esserci delle lacune nell'elenco degli id. Consulta l'articolo per esempi più avanzati