Jeg tror, den hurtigste løsning er
select * from table where rand() <= .3
Her er grunden til, at jeg synes, at dette burde gøre arbejdet.
- Det vil oprette et tilfældigt tal for hver række. Tallet er mellem 0 og 1
- Den evaluerer, om den pågældende række skal vises, hvis det genererede tal er mellem 0 og 0,3 (30%).
Dette antager, at rand() genererer tal i en ensartet fordeling. Det er den hurtigste måde at gøre dette på.
Jeg så, at nogen havde anbefalet den løsning, og de blev skudt ned uden bevis. her er, hvad jeg ville sige til det -
- Dette er O(n), men der kræves ingen sortering, så det er hurtigere end O(n lg n)
-
mysql er meget i stand til at generere tilfældige tal for hver række. Prøv dette -
vælg rand() fra INFORMATION_SCHEMA.TABLES grænse 10;
Da den pågældende database er mySQL, er dette den rigtige løsning.