Przeszukajmy polski fragment sieci na występowanie słów kluczowych: mysql „order by rand”. Co widzimy? Na pierwszym miejscu mamy link wyjaśniający, jak najprościej pobrać losowe rekordy z tabeli. Spora część innych linków także opisuje stosowanie tej funkcji jako wygodne rozwiązanie problemu losowości. Z doświadczenia zdobytego w pracy jako administrator MySQL wiem natomiast, że ORDER BY RAND to zło. Czy można wobec tego wierzyć sieci?

Podstawową sprawą jest własnoręczne przetestowanie wszelkich sugestii, nowinek i porad znalezionych w sieci. Przetestowanie na kopii zestawu danych, który jest używany produkcyjnie (na przykład na danych z kopii zapasowej). Przetestowanie na serwerze MySQL w tej samej wersji i tak samo skonfigurowanym jak serwer produkcyjny. Przetestowanie na platformie sprzętowej jak najbliższej platformie produkcyjnej. Trzeba także zrozumieć, co się dzieje na serwerze. Jak wygląda plan dotychczasowego zapytania a jak wygląda plan zapytania zmodyfikowanego? Co się zmieniło? Co się dzieje na serwerze podczas wykonywania tych zapytań? Ile rekordów jest odczytywanych, ile zapisywanych? Ile tablic tymczasowych jest tworzonych i gdzie? Trzeba przeprowadzić benchmark – sprawdzić maksymalną ilość starych zapytań, jakie wykonają się w czasie sekundy i porównać do ilości nowych.
Dopiero po takiej analizie możemy ocenić czy dana sugestia znaleziona w Google ma sens dla naszego zestawu danych obsługiwanego przez MySQL skonfigurowany przez nas i działający na naszym serwerze fizycznym.
czytaj dalej…