sql >> Databáze >  >> RDS >> Mysql

Jednoduché náhodné vzorky z databáze SQL

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í.



  1. Aktualizujte řádky v jedné tabulce daty z jiné tabulky na základě stejného sloupce v každém

  2. Jak vložit blob do databáze pomocí SQL Server Management Studio

  3. SQL AS:Použití, příklady a jak vám může nejlépe prospět

  4. Jsou proměnné PL/SQL v kurzorech efektivně stejné jako parametry vazby?