Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Производительность UPDATE при JOIN


Автор: maxipub 23.3.2018, 18:03
Если взять запрос вида:

Код
UPDATE t1
INNER JOIN t2 on t2.sub_id=t1.id 
INNER JOIN t3 on t3.sub_id=t1.id 
SET t1.data=111 
WHERE t1.name=222


В таблице t1 десять полей с name=222. Если заменить UPDATE на аналогичный SELECT, будет нечто вроде:

Код
SELECT * FROM t1
INNER JOIN t2 on t2.sub_id=t1.id 
INNER JOIN t3 on t3.sub_id=t1.id 

WHERE t1.name=222


Получим выборку на несколько тысяч строк.

Вопрос: такой UPDATE будет аналогичен нескольким тысячам UPDATE-ов, т.е. как все SELECT-ится, так все будет и UPDATE-тится и надо думать над каким-нибудь GROUP BY, или UPDATE в данном случае будет выполняться по оптимальному сценарию, и одни и те же данные не будут по кругу гоняться?

Автор: Akina 23.3.2018, 22:28
Запись обновляется только один раз. 

Автор: maxipub 27.3.2018, 11:01
Akina, да, похоже так оно и есть. Провел тест, количество затрагиваемых строк говорит о том же.

Автор: Akina 27.3.2018, 12:08
Цитата(maxipub @  27.3.2018,  12:01 Найти цитируемый пост)
похоже так оно и есть

Это документировано.

Цитата(https://dev.mysql.com/doc/refman/5.7/en/update.html)

Each matching row is updated once, even if it matches the conditions multiple times.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)