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.
 
mysql
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!


Zpět na hlavní stranu blogu