Myslím, že nejrychlejší řešení je
select * from table where rand() <= .3
Zde je důvod, proč si myslím, že by to mělo fungovat.
- Pro každý řádek vytvoří náhodné číslo. Číslo je mezi 0 a 1
- Vyhodnocuje, zda se má daný řádek zobrazit, pokud je vygenerované číslo mezi 0 a 0,3 (30 %).
To předpokládá, že rand() generuje čísla v jednotné distribuci. Je to nejrychlejší způsob, jak toho dosáhnout.
Viděl jsem, že někdo toto řešení doporučil a byli sestřeleni bez důkazu.. k tomu bych řekl toto -
- Toto je O(n), ale není vyžadováno žádné řazení, takže je rychlejší než O(n lg n)
-
mysql je velmi schopný generovat náhodná čísla pro každý řádek. Zkuste toto -
vyberte rand() z INFORMATION_SCHEMA.TABLES limit 10;
Vzhledem k tomu, že se jedná o databázi mySQL, je toto správné řešení.