RAND() je na večjih datasetih zelo počasen zato, če se le, da se ga v takšnih primerih izogibaj (indekse domnevam, da imaš urejene).
Predlog od blackmamba pa bo se še najverjetneje izvajal počasneje od tega, kar imaš sedaj.
RAND() je že tako počasen, LIMIT nekovelikoštevilo, 1 pa je na večjih datasetih v večini primerov tudi zelo počasen.
Če se ti SELECT MAX(id) .... LIMIT 1 izvaja enako počasi, potem sem sam skoraj brez kakšnih drugih konkretnih predlogov.
Sicer vseeno menim, da se ti ta stavek ne bi smel izvajati skoraj enako dolgo in bi ta rešitev morala delovati v redu (torej dobiš max id, nato programsko naključno generiraš toliko različnih idjev, kot jih pač potrebuješ, na koncu pa SELECT-aš vrstice s temi ID-ji iz baze).
Ena izmed "ne ravno lepih" rešitev, ki se jo še trenutno spomnim pa je ta, da bi v tabeli dodal še eno polje, kjer bi vedno ob vnosu vpisal naključno vrednost, potem bi namesto RAND() sortiral po tem stolpcu.
Seveda bi ta stolpec moral biti indeksiran, rabil bi pa še neko skripto, ki bi na primer vsako noč šla čez vse vrstice v tej tabeli in bi posodobila naključne vrednosti v tem novem stolpcu.