我有以下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的结果?
答案 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毫秒似乎非常慢)。