1

我有如下查询:

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 是我传递的两个变量...

4

1 回答 1

0

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

EXPLAIN SELECT product.id FROM products ...

您可以解释EXPLAIN使用以下链接http://dev.mysql.com/doc/refman/5.0/en/explain-output.html的结果

查看具有最大值的部分rows并思考如何优化这些部分。用作possible_keys提示。

于 2013-11-13T10:39:34.247 回答