Alternativa k ORDER BY RAND () pro MySQL

3. 09 2020 | 14.33

Začal jsem sbírat data z databáze, když nějaký dotaz nepoužije klíč nebo je příliš pomalý. Našel jsem pár maličkostí k vyřešení.

Jeden z nich byl výběr řádků z databáze sestříděný náhodně - Order by rand().

Databáze MySQL hlásí:
Tmp_tables: 1  Tmp_disk_tables: 0  Tmp_table_sizes: 127072
# Full_scan: Yes  Full_join: No  Tmp_table: Yes  Tmp_table_on_disk: No
# Filesort: Yes  Filesort_on_disk: No  Merge_passes: 0  Priority_queue: Yes

Jj, musí se prohledat všechny řádky, abych dostal svůj výsledek. Tabulka s daty sice není největší, ale i to zamrzí.
 
Napadla mě jednoduchá věc. Do tabulky jsem přidal další sloupec s názvem RAND, INT(11). Tento sloupec plním náhodnými čísly. Nepotřebuji, aby každou vteřinu byl výběr jiný. Stačí mi to třeba každých 5 minut, v mém případě 2x do hodiny. Stačí nastavit CRON, do něj skript, který v daný čas tabulku projde a zamění pole RAND za nová náhodná čísla a tím se to celé zase přetřídí jinak.
 
Nezapomenout dát na pole RAND klíč! :) Jednoduché a funkční! Order by rand.
 
mysql
A výsledek? Fenomenální.