优化Virtuemart属性查询

时间:2013-03-01 03:36:30

标签: mysql optimization

我在下面有一个选择查询,它的作用是选择与Virtuemart表中某个属性匹配的所有产品。属性表相当大(几乎6000行)。有没有办法优化下面的查询,或者是否有任何其他可能有用的过程,我已经尝试过将索引添加到一个甚至两个表中。

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表的结果:

id  select_type     table                       type    possible_keys                                               key             key_len     ref     rows    Extras
1   SIMPLE          jos_vm_product_attribute    range   idx_product_attribute_name,attribute_value,attribute_name   attribute_value 765         NULL    333     Using where; Using temporary; Using filesort
1   SIMPLE          jos_vm_product              eq_ref  PRIMARY                                                     PRIMARY         4           shoemark_com_shop.jos_vm_product_attribute.product_id   

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

使用jos_vm_product_attribute.attribute_namejos_vm_product_attribute.attribute_name上的复合索引替换jos_vm_product_attribute.attribute_value索引(按此顺序)应该有助于此查询。目前,它仅使用WHERE jos_vm_product_attribute.attribute_value条件中的索引,但此新索引可用于WHERE条件的两个部分。