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

Jak działa funkcja ORDER BY RAND() w MySQL?

Chociaż nie ma czegoś takiego jak „szybkie zamówienie według rand()”, istnieje obejście tego konkretnego zadania.

Dla uzyskania dowolnego pojedynczego losowego wiersza , możesz robić to, co robi ten niemiecki bloger:http://web.archive.org/web/202021210404/http://www.roberthartung.de/mysql-order-by-rand-a- studium przypadku-alternatyw/ (Nie mogłem zobaczyć adresu URL hotlinku. Jeśli ktoś go zobaczy, możesz go edytować.)

Tekst jest w języku niemieckim, ale kod SQL znajduje się nieco niżej i w dużych białych polach, więc nie jest trudno go zobaczyć.

Zasadniczo to, co robi, to wykonanie procedury, która wykonuje zadanie uzyskania prawidłowego wiersza. To generuje losową liczbę od 0 do max_id, spróbuj pobrać wiersz, a jeśli nie istnieje, idź dalej, aż trafisz na taki, który działa. Pozwala na pobranie x liczby losowych wierszy, przechowując je w tabeli tymczasowej, więc prawdopodobnie możesz przepisać procedurę, aby trochę szybciej pobrać tylko jeden wiersz.

Wadą tego jest to, że jeśli usuniesz DUŻO wierszy i są ogromne luki, istnieje duże prawdopodobieństwo, że ominie tony razy, przez co będzie nieskuteczne.

Aktualizacja:różne czasy wykonania

Może to mieć związek z indeksowaniem. id jest zaindeksowany i szybki dostęp, podczas gdy dodanie username do wyniku, oznacza to, że musi odczytać to z każdego wiersza i umieścić w tabeli pamięci. Za pomocą * musi również wczytać wszystko do pamięci, ale nie musi przeskakiwać pliku danych, co oznacza, że ​​nie ma straconego czasu na szukanie.

Ma to znaczenie tylko wtedy, gdy istnieją kolumny o zmiennej długości (varchar/text), co oznacza, że ​​należy sprawdzić długość, a następnie pominąć tę długość, w przeciwieństwie do pomijania ustawionej długości (lub 0) między każdym wierszem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aby użyć domyślnego programu BatchConfigurer, kontekst musi zawierać nie więcej niż jedno źródło danych, znalezione 2

  2. PHP/MYSQL JavaScript - Wstaw wartość wiersza pobraną z bazy danych do pola tekstowego za pomocą przycisku

  3. Implikacje nadtypu i podtypu

  4. szyny LICZENIE WYBIERZ WYRÓŻNIENIE

  5. Dane MySQL INSERT nie są zapisywane w odpowiedniej bazie danych, tylko tymczasowo?