sql >> Database >  >> RDS >> Mysql

Eenvoudige willekeurige steekproeven uit een SQL-database

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.



  1. Hoe kan ik de relevantie van MySQL-zoekopdrachten in volledige tekst manipuleren om het ene veld 'waardevoller' te maken dan het andere?

  2. Overzicht van gegevenscompressie in SQL Server

  3. Hoe een string in PL/SQL te splitsen?

  4. MySQL JDBC-stuurprogramma's installeren in Pentaho Data Integration en BA Server-tools