2011-07-25 45 views
0

我必須編寫一些查詢以在我的主頁上顯示特定產品。但是,這些時間很長,需要緩存。如何使用product_index改進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(); 

正如你所看到的,我需要那些獲得一個隨機的產品,這需要很長一段時間。

基本上這個查詢通過6個連接從magento_catalog_product_entity,magento_catalog_product_entity_int和magento_catalog_product_entity_varchar中獲取信息。

後來我發現這是一個類別頁面上,信息是通過Magento的從magento_catalog_product_entity,magento_catalog_category_product_index,magento_catalog_product_index_price和magento_cataloginventory_stock_item這是很多不是加入快進賬6倍

我如何使用相同類型的查詢獲取我的產品?我試圖沒有任何成功使用ResourceModel。

在此先感謝。

(請原諒我的英文)

回答

3

產品指標不會提高性能。

提高性能的一些建議: 首先,不要選擇所有屬性。只獲取你真正需要的屬性(這是關於addAttributeToSelect('*')) 接下來。看起來您需要第2,3,4和5行中的addAttributeToFilter方法。這將減少收集大小,收集將佔用更少的內存。 使用緩存和延遲加載。

+0

謝謝。我注意到在小的結果集上,最好使用PHP進行隨機化。但是在大型的MySQL上效率更高。 – Fred