質問

次のコードがあります。

        $collection = Mage::getModel('catalog/product')->getCollection();
        $collection->addAttributeToSelect(array('featuredcategory','featured', 'price','name','small_image','frontend_name'));
        $collection->addFieldToFilter('type_id', 'configurable');

これには約5秒かかります。しかし、私が最後の行にコメントするとき、すなわち

//$collection->addFieldToFilter('type_id', 'configurable');

1.5秒未満かかります。

フラットカタログを有効にしています。

質問:このコレクションに何か問題がありますか?

Magento 1.6を使用しています

役に立ちましたか?

解決

質問:このコレクションに何か問題がありますか?

いいえ。

フラットが有効になっている場合

Magentoがどの列がフラットテーブルに生成されるかをチェックする方法はわかりません。 Type_idはそうではなく、フラットテーブルに接続する必要がありますか?クエリを確認してください $collection->load(true) マゼントがやっていること。

フラットが有効になっていない場合

これは私には意味がありません。列 type_id 静的な属性であり、ベーステーブルの一部であることを意味します catalog_product_entity. 。他の属性と比較して、この列でフィルタリングするのは非常に速いはずです。

問題は、列にインデックスがないため、MySQLが完全なテーブルスキャンを行う必要があることですが、他のフィルターがない場合、Magentoはすべての製品を取得するため、フルテーブルスキャンも行います。このクエリが頻繁に必要な場合、または顧客に関連する場合、列にインデックスを追加することを試すことができます。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top