Semeno Rand()
MySQL používá systémové hodiny k seedování RAND()
když neexistuje žádná druhá hodnota. Výchozí hodnota je v mikrosekundách a nemohu reprodukovat problém RAND()
vytváří stejnou hodnotu dvakrát, než popisujete.
Pokud otevřete MySQL Workbench a provedete dva příkazy současně. Výstup je u každého jiný.
SELECT RAND();
SELECT RAND();
Když otevřete více karet a získáte stejné výsledky. Pravděpodobně se jedná o problém s mezipamětí, ale uvádíte, že orazítkujete adresu URL, abyste zabránili ukládání do mezipaměti. Povolte tedy protokolování SQL na serveru a ověřte, že jsou volány nové dotazy.
Výkon Rand()
ORDER BY RAND()
je pomalý, protože ke čtení celé tabulky vyžaduje MySQL. Dokonce ORDER BY RAND() LIMIT 1
stále vyžaduje MySQL ke čtení celé tabulky.
AKTUALIZACE:
Můžete vidět, jaká je náhodná hodnota, kterou SQL generuje.
$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";
To bude zahrnovat sloupec X
pro každý řádek. Náhodná hodnota použitá k seřazení dotazu. Přidejte to do výstupu a zjistěte, zda je každý prohlížeč skutečně vrací stejné sady výsledků z MySQL.