На самом деле ... Я закончил тестирование и мог ответить на свой вопрос.Я думал, что выложу эту информацию здесь на случай, если она будет полезна кому-то еще.(Если я сделал что-то не так, пожалуйста, дайте мне знать!)
Это удивительно ...
Вопреки всему, что я прочитал, я создал таблицу под названиемTestData с 1 миллионом строк и запустил следующий запрос:
SELECT * FROM TestData WHERE number = 41 ORDER BY RAND () LIMIT 8
... и он возвратил строки в среднем0,0070 секунд.Я действительно не понимаю, почему у RAND () такая плохая репутация.Мне это кажется довольно полезным, по крайней мере, в этой конкретной ситуации.
У меня в таблице три столбца:
id [BIGINT (20)] |текстовое поле [tinytext] |число [BIGINT (20)]
Первичный ключ по идентификатору, индекс по номеру.
Я думаю, MySQL достаточно умен, чтобы знать, что он должен применять RAND () только к 20 строкам, которыевозвращаются "ГДЕ число = 41"?(Я специально добавил только 20 строк, которые имели значение «число» для 41).
Метод альтернативного подзапроса возвращает результаты со средним временем около 0,0080 секунд, что медленнее, чем метод без подзапроса.
Метод подзапроса: SELECT * FROM (SELECT * FROM TestData WHERE number = 41) в качестве t ORDER BY RAND () LIMIT 8