0

以下にselectクエリがあります。これは、Virtuemartテーブルから特定の属性に一致するすべての製品を選択することです。属性テーブルはかなり大きいです(ほぼ6000行)。以下のクエリを最適化する方法はありますか、または役立つ可能性のある他のプロセスはありますか?私はすでに1つまたは2つのテーブルにインデックスを追加しようとしました。

SELECT DISTINCT `jos_vm_product`.`product_id`,
    `jos_vm_product_attribute`.`attribute_name`, 
    `jos_vm_product_attribute`.`attribute_value`,
    `jos_vm_product_attribute`.`product_id` 
FROM (`jos_vm_product`) 
    RIGHT JOIN `jos_vm_product_attribute` 
        ON `jos_vm_product`.`product_id` = `jos_vm_product_attribute`.`product_id`  
WHERE ((`jos_vm_product_attribute`.`attribute_name` = 'Size') 
    AND ((`jos_vm_product_attribute`.`attribute_value` = '6.5')  
        OR (`jos_vm_product_attribute`.`attribute_value` = '10')))    
GROUP BY `jos_vm_product`.`product_sku`   
ORDER BY CONVERT(`jos_vm_product_attribute`.`attribute_value`, SIGNED INTEGER)
LIMIT 0, 24

EXPLAINテーブルの結果は次のとおりです。

idselect_typeテーブルタイプpossible_keyskeykey_len ref rowsExtras
1 SIMPLE jos_vm_product_attribute range idx_product_attribute_name、attribute_value、attribute_name attribute_value 765NULL333使用場所; 一時的な使用; filesortの使用
1 SIMPLE jos_vm_product eq_ref PRIMARY PRIMARY 4shoesmark_com_shop.jos_vm_product_attribute.product_id   

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

0

jos_vm_product_attribute.attribute_nameインデックスを複合インデックスにjos_vm_product_attribute.attribute_name(この順序で)置き換えると、jos_vm_product_attribute.attribute_valueこのクエリに役立ちます。現在、のWHERE条件でインデックスのみを使用していますjos_vm_product_attribute.attribute_valueが、この新しいインデックスは条件の両方の部分で使用できWHEREます。

于 2013-03-01T15:00:38.367 に答える