MySQL Обновление: почему ряды соответствуют изменению на основе пункта SET?

dba.stackexchange https://dba.stackexchange.com/questions/2963

  •  16-10-2019
  •  | 
  •  

Вопрос

Я запустил запрос на обновление, соединяющую огромное количество таблиц, которые обновили одно поле, и он соответствовал 29K некоторым рядам. Запуск того же запроса только с добавлением в набор в предложении увеличило соответствующие ряды до 118 тыс. Некоторых смажных рядов. Кажется, это должно измениться только в том случае, если пункт о том, где было отредактировано.

Это было полезно?

Решение

Я думаю, я только что понял это ...

MySQL должен подсчитать количество строк, которые будут обновляться, не все те, которые будут сгенерированы соединением, которое происходит во время обновления. Разница в том, что если есть много [b] к одному [A], и многие [C] к одному [B], соединение всех создаст N ([C]) строки, но обновление [B] только считалось только N ( [B]). Добавление набора для [c] делает это число n ([b]) + n ([c]).

Поскольку поля в предложении SET находятся в разных таблицах, он изменяет обновленное число.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top