Использование 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()
для деталей реализации.