Причината, поради която подреждането по RAND()
може да бъде бавен е, че принуждавате базата данни действително да сортира цялата таблица, преди да върне нещо. Само намаляването на натоварването до едно сканиране на таблица е много по-бързо (макар и малко бавно).
Това означава, че можете да получите част от пътя, само като избегнете поръчката:
SELECT *
FROM my_table
WHERE RAND() < 0.1
ORDER BY RAND()
LIMIT 100
Това ще избере приблизително 1% от всички редове в таблицата, ще ги сортира и ще върне първите 100. Само имайте предвид, че основният проблем тук (както и с отговора на @cmd) е, че не можете да сте сигурни, че заявката се връща изобщо всичко.
Подходът по-горе трябва да включва сканиране на цяла таблица (за да се реши кои редове да се използват), последвано от приблизително 1% от редовете. Ако имате много редове, можете съответно да намалите процента.