Myślę, że najszybszym rozwiązaniem jest
select * from table where rand() <= .3
Oto dlaczego uważam, że to powinno wystarczyć.
- Stworzy losową liczbę dla każdego wiersza. Liczba wynosi od 0 do 1
- Ocenia, czy wyświetlić ten wiersz, jeśli wygenerowana liczba wynosi od 0 do 0,3 (30%).
Zakłada się, że rand() generuje liczby w rozkładzie jednolitym. To najszybszy sposób, aby to zrobić.
Widziałem, że ktoś polecił to rozwiązanie i zostali zestrzeleni bez dowodu.. oto co bym na to powiedział -
- To jest O(n), ale nie jest wymagane sortowanie, więc jest szybsze niż O(n lg n)
-
mysql jest bardzo zdolny do generowania liczb losowych dla każdego wiersza. Spróbuj tego -
wybierz rand() z INFORMATION_SCHEMA.TABLES limit 10;
Ponieważ daną bazą danych jest mySQL, jest to właściwe rozwiązanie.