0

検索文字列を含む配列を次のコードでカスタムカタログ検索します。

$collection =    Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToSelect('*')
        ->addAttributeToFilter('visibility', $visibility);

        foreach($searchNames as $searchName){
            $collection->addAttributeToFilter(array(
                    array('attribute'=> 'name','like' => '%'.$searchName.'%'),
                    array('attribute'=> 'search_field','like' => '%'.$searchName.'%'),
                    array('attribute'=> 'sku','like' => '%'.$searchName.'%')));
        }

〜6kの結果が得られたら、検索には約5秒かかります。これをスピードアップする方法はありますか?おそらく、私がまだ見つけていないパフォーマンスの微調整がいくつかあります。

テーブルcatalog_product_flatのこれらのフィールドにすでにインデックスを設定していますが、変更はありません。

4

1 に答える 1

0

インデックスはnamesearch_fieldおよびsku属性のクエリでは機能しません。LIKE値はワイルドカード(%)で始まり、インデックスは定数で始まる場合にのみ機能するためです。%LIKE値から先頭を削除すると、クエリが高速化されます。

なぜforeachを使用しているのかわかりませんか?

于 2013-02-22T21:11:35.450 に答える