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

Dobrý nápad/špatný nápad? Používáte MySQL RAND() mimo malou sadu výsledků dílčích dotazů?

Vlastně...skončil jsem testem a možná jsem odpověděl na svou vlastní otázku. Myslel jsem, že zde tyto informace zveřejním pro případ, že by byly užitečné pro někoho jiného. (Pokud jsem zde udělal něco špatně, dejte mi prosím vědět!)

To je trochu překvapivé...

Na rozdíl od všeho, co jsem četl, jsem vytvořil tabulku nazvanou TestData s 1 milionem řádků a spustil následující dotaz:

SELECT * FROM TestData WHERE number =41 ORDER BY RAND() LIMIT 8

...a vrátil řádky v průměru za 0,0070 sekundy. Opravdu nechápu, proč má RAND() tak špatnou pověst. Zdá se mi to docela použitelné, alespoň v této konkrétní situaci.

V tabulce mám tři sloupce:

id [BIGINT(20)] | textové pole [tinytext] | číslo [BIGINT(20)]

Primární klíč na id, index na čísle.

Myslím, že MySQL je dost chytrý na to, aby věděl, že by měl používat RAND() pouze na 20 řádků, které vrací "WHERE number =41"? (Konkrétně jsem přidal pouze 20 řádků, které měly hodnotu 41 pro 'číslo'.)

Alternativní metoda poddotazu vrací výsledky s průměrnou dobou přibližně 0,0080 sekundy, což je pomalejší než metoda bez poddotazu.

Metoda dílčího dotazu:SELECT * FROM (SELECT * FROM TestData WHERE číslo =41) jako t ORDER BY RAND() LIMIT 8



  1. MySQL2 Ruby drahokam nelze nainstalovat 10.6

  2. Existuje způsob, jak automaticky vygenerovat diagram UML?

  3. Provedení WHERE IN na více sloupcích v Postgresql

  4. Otázka osvědčeného postupu pro MySQL:seřadit podle ID nebo data?