我有如下查询:
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个变量...
答案 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
作为提示。