我在下面有一个选择查询,它的作用是选择与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
非常感谢任何帮助。感谢。
答案 0 :(得分: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
条件的两个部分。