Quassnoi написал сообщение о выборе строк в произвольном порядке без выполнения сортировки. Его пример выбирает 10 строк случайным образом, но вы можете адаптировать его для выбора только одной строки.
Если вы хотите, чтобы он был действительно быстрым, то вы можете использовать приближение, которое не будет полностью равномерным или иногда не сможет вернуть строку.
Вы также можете использовать хранимую процедуру для быстрого выбора случайной строки из Пост Билла Карвина :
SET @r := (SELECT ROUND(RAND() * (SELECT COUNT(*) FROM mytable)));
SET @sql := CONCAT('SELECT * FROM mytable LIMIT ', @r, ', 1');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
Обратите внимание, что в MyISAM это будет выполняться намного быстрее, чем в InnoDB, поскольку COUNT (*) стоит дорого в InnoDB, но почти мгновенно в MyISAM.