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

Kiedy porządkuje funkcja MySQL ORDER BY RAND()?

Masz rację, zastosuje ORDER BY po zmniejszeniu liczby wierszy za pomocą WHERE, GROUP BY i HAVING. Ale zastosuje ORDER BY przed LIMIT.

Więc jeśli wystarczająco odfiltrujesz liczbę wierszy, to tak, ORDER BY RAND() może osiągnąć to, czego chcesz, bez dużego wpływu na wydajność. Prosty i łatwy do odczytania kod ma uzasadnioną korzyść.

Kłopot pojawia się, gdy myślisz Twoje zapytanie powinno zredukować wiersze do czegoś małego, ale z biegiem czasu, gdy dane rosną, liczba wierszy, które trzeba posortować, znów staje się duża. Ponieważ twoje zapytanie wykonuje wtedy LIMIT 10 na posortowanym wyniku, ukrywa fakt, że wykonujesz ORDER BY RAND() na 500k wierszach. Po prostu widzisz, jak wydajność w tajemniczy sposób się pogarsza.

O alternatywnych metodach wybierania losowego wiersza napisałem w mojej książce Antywzorce SQL:unikanie Pułapki programowania baz danych lub w innych odpowiedziach tutaj na Stack Overflow:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz rekordy bieżącego miesiąca mysql z kolumny sygnatury czasowej

  2. Jak prawidłowo obsłużyć zakleszczenia InnoDB w Java/JDBC?

  3. Nie można zainstalować mysql-connector-python w virtualenv

  4. Nie można połączyć się bezpośrednio z Androida do SQL Server

  5. Laravel PDOException SQLSTATE[HY000] [1049] Nieznana baza danych „forge”