0
我在下面有一個選擇查詢,它所做的是選擇所有與來自Virtuemart表的特定屬性匹配的產品。屬性表相當大(近6000行)。有沒有什麼辦法來優化下面的查詢,或者是否有其他可能有用的進程,我已經嘗試將索引添加到一個甚至兩個表中。Virtuemart屬性查詢的優化
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
任何幫助將不勝感激。謝謝。
嗨G-Nugget,謝謝你的回覆。我試着按照你的建議做,但發生了以下錯誤: #1071 - 指定的密鑰太長;最大密鑰長度爲1000字節 – 2013-03-05 22:24:42
編輯:實際上,我縮短了這兩列的字符長度,然後重新運行SQL alter table SQL命令以添加到組合索引中,它工作正常,沒有發生錯誤。我會檢查速度是否有差異。謝謝! – 2013-03-05 22:33:10
@TarunDhanwani這些列的數據類型和字符集是什麼?如果可能的話,你應該嘗試完全索引列。如果您使用的是utf-8歸類,則可以有效地將索引中的字段長度加倍,這將使其更快地達到1000字節的限制。 – 2013-03-06 14:48:10