2011-07-25 11 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(); 

、私は長い時間がかかるランダムな製品を得るためにそれらを必要としています。

基本的に、このクエリはmagento_catalog_product_entity、magento_catalog_product_entity_int、およびmagento_catalog_product_entity_varcharから6つの結合を介して情報を取得します。私は、カテゴリページ上で、情報がたくさん速く6回

どのように私は、クエリの同じタイプを使用することができますに参加するよりもmagento_catalog_product_entity、magento_catalog_category_product_index、magento_catalog_product_index_priceとmagento_cataloginventory_stock_itemからMagentoのでフェッチされていること、それに気づいた何

私のプロダクトを取得するには?私は、成功なしにResourceModelを使用しようとしました。

ありがとうございます。

(私の英語を許してください)

答えて

3

製品インデックスはパフォーマンスを改善しません。

パフォーマンスを改善するためのアドバイス: まず、すべての属性を選択しないでください。本当に必要な属性だけを取得します(addAttributeToSelect( '*')について) 次へ2番目、3番目、4番目、5番目の行でaddAttributeToFilterメソッドが必要なように見えます。コレクションのサイズが小さくなり、コレクションのメモリが少なくなります。 キャッシュと遅延ロードを使用します。

+0

ありがとうございました。小さな結果セットでは、PHPを使用してランダム化する方が良いことに気付きました。しかし、大規模なものではMySQLがより効率的です。 – Fred

関連する問題