Как улучшить Magento запросы с помощью product_index - PullRequest
0 голосов
/ 25 июля 2011

Мне пришлось написать несколько запросов, чтобы показать конкретные продукты на моей домашней странице. Однако они ненормально длинные и должны быть кэшированы.

Это пример запроса, выполненного с моей домашней страницы:

$bogof = Mage::getModel('catalog/product')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('status',1)
    ->addAttributeToFilter('promocode',10)
    ->addAttributeToFilter('visibility',array('neq' => 1));
$bogof->getSelect()->order('rand()');
$bogof = $bogof->getFirstItem();

Как видите, мне нужны те, чтобы получить случайный продукт, который занимает много времени.

В основном этот запрос извлекает информацию из magento_catalog_product_entity, magento_catalog_product_entity_int и magento_catalog_product_entity_varchar через 6 объединений.

То, что я заметил, это то, что на странице категории Magento получает информацию из magento_catalog_product_entity, magento_catalog_category_product_index, magento_catalog_product_index_price и magento_cataloginventory_stock_item, что в 6 раз быстрее, чем в 6 раз, чем в 6 раз быстрее, чем объединение

Как я могу использовать один и тот же тип запросов для получения моих продуктов? Я пытался использовать ResourceModel безуспешно.

Заранее спасибо.

(Пожалуйста, прости мой английский)

1 Ответ

3 голосов
/ 25 июля 2011

Товарные индексы не улучшат производительность.

Несколько советов по улучшению производительности: Прежде всего, не выбирайте все атрибуты. Получите только те атрибуты, которые вам действительно нужны (это касается addAttributeToSelect ('*')) Следующий. Похоже, вам нужен метод addAttributeToFilter во 2-й, 3-й, 4-й и 5-й строках. Это уменьшит размер коллекции, и коллекция займет меньше памяти. Используйте кеш и отложенную загрузку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...