Невозможное ГДЕ замечено после чтения таблиц const в EXPLAIN для оператора UPDATE в MYSQL

У меня есть следующая инструкция 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 я получаю сообщение обратно как

Невозможное ГДЕ замечено после чтения константных таблиц

На данный момент выбор диапазона из 21 записи возвращается в среднем примерно за 0,400 секунды.

Я уже добавил индекс в поля t2.Id и t2.Day. По сути, требованием этого оператора обновления является получение всех записей, существующих в таблице 2, с идентификатором 1 для каждого дня (или всех дат между DayStart и DayEnd, к которым у меня есть доступ).

Можно ли как-то улучшить это с точки зрения производительности, или мне не следует беспокоиться о результате EXPLAIN?


person neildt    schedule 19.11.2013    source источник
comment
В чем вопрос? Чтобы избавиться от сообщения «Невозможно, ГДЕ...» или улучшить запрос на обновление?   -  person hacksteak25    schedule 19.11.2013
comment
Поместите ',', чтобы отделить обновленный столбец, например t1.Price = t2.Price, t1.Name = t2.Name.   -  person Vishal Kamal    schedule 19.11.2013
comment
@ hacksteak25 Я добавил к вопросу. Спасибо.   -  person neildt    schedule 19.11.2013
comment
на этот раз 0.400 seconds on average. сообщение с объяснением беспокоило меня.   -  person Jorge Campos    schedule 19.11.2013
comment
@JorgeCampos Вот почему я попросил помочь его улучшить :)   -  person neildt    schedule 19.11.2013


Ответы (1)


я предполагаю, что

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 OR Day = '2013-11-02'?

Если вы решили Impossible WHERE..., вы можете начать оптимизировать свой запрос с результатом EXPLAIN (400 мс кажутся очень медленными).

person hacksteak25    schedule 19.11.2013