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

Dlaczego MySQL zwraca te same wyniki podczas używania RAND() w instrukcji SELECT?

Nasiono Rand()

MySQL używa zegara systemowego do inicjowania RAND() gdy nie ma drugiej wartości. Wartość seed jest w mikrosekundach i nie mogę odtworzyć problemu RAND() dające taką samą wartość dwukrotnie, jak opisujesz.

Jeśli otworzysz MySQL Workbench i wykonasz dwie instrukcje jednocześnie. Dane wyjściowe są różne dla każdego.

SELECT RAND();
SELECT RAND();

Gdy otworzysz wiele kart i uzyskasz te same wyniki. Prawdopodobnie jest to problem z buforowaniem, ale stwierdzasz, że stemplujesz adres URL, aby zapobiec buforowaniu. Włącz więc logowanie SQL na serwerze i sprawdź, czy wywoływane są nowe zapytania.

Wydajność Rand()

ORDER BY RAND() jest powolny, ponieważ wymaga MySQL do odczytania całej tabeli. Nawet ORDER BY RAND() LIMIT 1 nadal wymaga MySQL do odczytania całej tabeli.

AKTUALIZACJA:

Możesz zobaczyć, jaka jest losowa wartość, którą generuje SQL.

$query = "SELECT *, RAND() AS `X`
          FROM customers
          WHERE customer_group='consumables' AND customer_updated < DATE_SUB(NOW(), INTERVAL 1 DAY)
          ORDER BY `X`
          LIMIT 10";

Obejmuje to kolumnę X dla każdego rzędu. Losowa wartość używana do uporządkowania zapytania. Dodaj to do danych wyjściowych i sprawdź, czy każda przeglądarka jest naprawdę zwracając te same zestawy wyników z MySQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. rozwijana lista php ajax

  2. Wybrać wartości, które spełniają różne warunki w różnych wierszach?

  3. mysql dostęp na poziomie wiersza użytkownika

  4. Samodzielny serwer MySQL

  5. wybierz 1 losowy wiersz ze złożonym filtrowaniem