如何优化多次使用变量的MySQL查询?

时间:2013-11-13 10:33:09

标签: mysql sql

我有如下查询:

SELECT product.id FROM products
INNER JOIN supplier ON supplier.id = product.supplier_id
WHERE supplier.country = 'UK'
AND (
(1000 BETWEEN product.date_on AND product.date_off) OR
(2000 BETWEEN product.date_on AND product.date_off) OR
(2000 >= product.date_on AND 
   (product.date_off IS NULL OR 1000 <= product.date_off))
)

该查询运行速度太慢,我相信我需要一些索引,但我不确定要添加什么。我在product.date_on和product.date_off上有索引,但因为我在AND子句中多次比较这些值,所以我认为没有使用索引。 也许可以使用复合索引,但我不知道哪些字段以及应该以什么顺序进行优化。 顺便说一句,1000和2000是我传递的2个变量...

1 个答案:

答案 0 :(得分:0)

为了优化查询,您应该查看执行计划。 只需在查询前添加EXPLAIN

EXPLAIN SELECT product.id FROM products ...

您可以使用以下链接http://dev.mysql.com/doc/refman/5.0/en/explain-output.html

来解释EXPLAIN的结果

查看最大rows的零件,并考虑如何优化这些零件。使用possible_keys作为提示。