不可能在使用EXPLAIN上的const表读取MYSQL中的UPDATE语句后注意到了

时间:2013-11-19 14:42:27

标签: mysql explain

我有以下UPDATE语句

UPDATE Table1 t1
INNER JOIN Table2 t2 ON (t1.Day = t2.Day AND t1.Id = t2.Id)
SET  
t1.Price = t2.Price,
t1.Name = t2.Name
WHERE t2.Id = 1
AND t2.Day = DATE_FORMAT(DATE_ADD('2013-11-01', INTERVAL 1 DAY),'%Y-%m-%d');

运行EXPLAIN语句时,我收到消息

  

不可能在阅读const表后注意到

目前,在平均约0.400秒内返回选择21个记录的范围。

我已经在字段t2.Id和t2.Day上添加了一个索引。基本上,此更新语句的要求是获取Table2中存在的所有记录,每天的Id为1(或者我可以访问的DayStart和DayEnd之间的所有日期)。

无论如何都要在性能方面改进这一点,还是我不应该担心EXPLAIN的结果?

1 个答案:

答案 0 :(得分:0)

我认为

SELECT * FROM Table1 t1
INNER JOIN Table2 t2 ON (t1.Day = t2.Day AND t1.Id = t2.Id)
WHERE t2.Id = 1
AND t2.Day = DATE_FORMAT(DATE_ADD('2013-11-01', INTERVAL 1 DAY),'%Y-%m-%d');

将返回空结果。

Impossible WHERE noticed after reading const tables与效果无关。 EXPLAIN只是告诉您在给定的WHERE条件下找不到数据集。那么表2中可能没有数据集,Id = 1或者Day ='2013-11-02'?

如果您解决了Impossible WHERE...,则可以使用EXPLAIN结果开始优化查询(400毫秒似乎非常慢)。