Powód, dla którego zamawianie przez RAND()
może być powolne, ponieważ zmuszasz bazę danych do sortowania całej tabeli przed zwróceniem czegokolwiek. Samo zmniejszenie obciążenia do skanowania pojedynczej tabeli jest znacznie szybsze (choć wciąż nieco wolne).
Oznacza to, że możesz osiągnąć część drogi, po prostu unikając zamawiania:
SELECT *
FROM my_table
WHERE RAND() < 0.1
ORDER BY RAND()
LIMIT 100
Spowoduje to wybranie około 1% wszystkich wierszy w tabeli, posortowanie ich i zwrócenie pierwszej setki. Pamiętaj tylko, że głównym problemem tutaj (jak również z odpowiedzią @cmd) jest to, że nie możesz być pewien, że zapytanie zwróci cokolwiek.
Powyższe podejście powinno obejmować skanowanie całej tabeli (aby zdecydować, których wierszy użyć), a następnie około 1% wierszy. Jeśli masz dużo wierszy, możesz odpowiednio zmniejszyć procent.