如何使用product_index改进Magento查询

时间:2011-07-25 09:07:57

标签: php mysql magento

我必须写一些查询以在我的主页上显示特定产品。但是,这些异常长,需要缓存。

这是从我的主页完成查询的示例:

$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次快得多

如何使用相同类型的查询来获取我的产品?我试图使用ResourceModel但没有任何成功。

提前致谢。

(请原谅我的英文)

1 个答案:

答案 0 :(得分:3)

产品索引不会提高性能。

一些提高绩效的建议: 首先,不要选择所有属性。只获取您真正需要的属性(它是关于addAttributeToSelect('*')) 下一个。看起来您需要第2行,第3行,第4行和第5行中的addAttributeToFilter方法。它将减少集合大小,集合将占用更少的内存。 使用缓存和延迟加载。