Всъщност... в крайна сметка направих тест и може би сам си отговорих на въпроса. Реших да публикувам тази информация тук, в случай че е полезна за някой друг. (Ако съм направил нещо нередно тук, моля, уведомете ме!)
Това е някак изненадващо...
Противно на всичко, което прочетох, създадох таблица, наречена TestData с 1 милион реда и изпълних следната заявка:
ИЗБЕРЕТЕ * ОТ TestData WHERE номер =41 ПОРЪЧАЙТЕ ПО RAND() LIMIT 8
...и връща редовете средно за 0,0070 секунди. Наистина не разбирам защо RAND() има толкова лоша репутация. Струва ми се доста използваемо, поне в тази конкретна ситуация.
Имам три колони в моята таблица:
id [BIGINT(20)] | текстово поле [малък текст] | номер [BIGINT(20)]
Първичен ключ на идентификатор, индекс на номер.
Предполагам, че MySQL е достатъчно умен, за да знае, че трябва да прилага само RAND() към 20-те реда, които се връщат от "WHERE number =41"? (Специално добавих само 20 реда, които имаха стойност 41 за „число“.)
Алтернативният метод на подзаявка връща резултати със средно време от около .0080 секунди, което е по-бавно от метода без подзаявка.
Метод на подзаявка:SELECT * FROM (SELECT * FROM TestData WHERE номер =41) като t ORDER BY RAND() LIMIT 8