sql >> Databáze >  >> RDS >> Mysql

Proč MySQL vrací stejné výsledky při použití RAND() v příkazu SELECT?

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.



  1. MySQL:data před rokem 1970

  2. MySQL:Dotazování na entity Unicode

  3. Jak v MySQL zkopírovat obsah jedné tabulky do jiné tabulky ve stejné databázi?

  4. Automatizace databáze Za novou švédskou elektronickou identitou Freja eID