Ik denk dat de snelste oplossing is
select * from table where rand() <= .3
Dit is waarom ik denk dat dit het werk zou moeten doen.
- Het zal een willekeurig nummer maken voor elke rij. Het getal ligt tussen 0 en 1
- Het evalueert of die rij moet worden weergegeven als het gegenereerde getal tussen 0 en 0,3 (30%).
Dit veronderstelt dat rand() getallen genereert in een uniforme verdeling. Het is de snelste manier om dit te doen.
Ik zag dat iemand die oplossing had aanbevolen en ze werden neergeschoten zonder bewijs. Dit is wat ik daarop zou zeggen -
- Dit is O(n) maar sorteren is niet vereist, dus het is sneller dan de O(n lg n)
-
mysql is heel goed in staat om willekeurige getallen voor elke rij te genereren. Probeer dit -
selecteer rand() van INFORMATION_SCHEMA.TABLES limiet 10;
Aangezien de database in kwestie mySQL is, is dit de juiste oplossing.