MySQL Обновление: почему ряды соответствуют изменению на основе пункта SET?
Вопрос
Я запустил запрос на обновление, соединяющую огромное количество таблиц, которые обновили одно поле, и он соответствовал 29K некоторым рядам. Запуск того же запроса только с добавлением в набор в предложении увеличило соответствующие ряды до 118 тыс. Некоторых смажных рядов. Кажется, это должно измениться только в том случае, если пункт о том, где было отредактировано.
Решение
Я думаю, я только что понял это ...
MySQL должен подсчитать количество строк, которые будут обновляться, не все те, которые будут сгенерированы соединением, которое происходит во время обновления. Разница в том, что если есть много [b] к одному [A], и многие [C] к одному [B], соединение всех создаст N ([C]) строки, но обновление [B] только считалось только N ( [B]). Добавление набора для [c] делает это число n ([b]) + n ([c]).
Поскольку поля в предложении SET находятся в разных таблицах, он изменяет обновленное число.