Использование ORDER BY RAND()
для возврата списка элементов в случайном порядке потребует полного сканирования таблицы и сортировки. Это может отрицательно повлиять на производительность большого количества строк в таблице.
Существует несколько альтернативных решений о том, как оптимизировать этот запрос. Magento предлагает для этого собственное решение.
Метод orderRand()
Varien_Db_Select
и адаптер базы данных позволяют указать случайный ордер и индекс кредитного плеча для ORDER BY
.
Укажите имя некоторого целочисленного индексированного столбца, который будет использоваться в предложении ORDER BY
, например:
$collection->getSelect()->orderRand('main_table.entity_id');
Подробнее о реализации см. Varien_Db_Adapter_Pdo_Mysql::orderRand()
.