Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zwróć losowe wyniki (kolejność według rand() )

Powód, dla którego zamawianie przez RAND() może być powolne, ponieważ zmuszasz bazę danych do sortowania całej tabeli przed zwróceniem czegokolwiek. Samo zmniejszenie obciążenia do skanowania pojedynczej tabeli jest znacznie szybsze (choć wciąż nieco wolne).

Oznacza to, że możesz osiągnąć część drogi, po prostu unikając zamawiania:

  SELECT *
    FROM my_table
   WHERE RAND() < 0.1
ORDER BY RAND()
   LIMIT 100

Spowoduje to wybranie około 1% wszystkich wierszy w tabeli, posortowanie ich i zwrócenie pierwszej setki. Pamiętaj tylko, że głównym problemem tutaj (jak również z odpowiedzią @cmd) jest to, że nie możesz być pewien, że zapytanie zwróci cokolwiek.

Powyższe podejście powinno obejmować skanowanie całej tabeli (aby zdecydować, których wierszy użyć), a następnie około 1% wierszy. Jeśli masz dużo wierszy, możesz odpowiednio zmniejszyć procent.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd składni MySQL ON DUPLICATE KEY UPDATE

  2. Zapytanie MySQL zawiesza się i musi przerwać proces

  3. int(11) vs. int(cokolwiek innego)

  4. Pola którego wiersza są zwracane podczas grupowania z MySQL?

  5. Kiedy dodać indeks do pola tabeli SQL (MySQL)?