Alternativa k ORDER BY RAND () pro MySQL
3. září 2020 | 14.33 | rubrika: píše.cz
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.


A výsledek? Fenomenální.
Komentáře k článku: Alternativa k ORDER BY RAND () pro MySQL
zlomenymec | 5. září 2020 | 09.02
Vůbec nevím o čem mluvíš (z MySQL znám jen fakt fakt fakt úplné základy), ale zníš hrozně nadšeně, takže ti to přeju!


