製品のコレクションには時間がかかりすぎます
-
16-10-2019 - |
質問
次のコードがあります。
$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はすべての製品を取得するため、フルテーブルスキャンも行います。このクエリが頻繁に必要な場合、または顧客に関連する場合、列にインデックスを追加することを試すことができます。
所属していません magento.stackexchange