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.