Первый запрос:
зачем вам вообще джойны и distinct? За отсечением отсутствующих городов и кампаний должны FK следить и не допускать такое в принципе. in subquery - в зависимости от версии mysql и количества данных. Имеет смысл попробовать переписать в join.
Второй:
зачем вообще внешний селект? Зачем группировка, сортировка и чуть менее чем все джойны?
Апдейты очевидно ждут блокировки. Если у вас единственно вменяемый innodb (и изоляция транзакций не serializable) - то селект их заблокировать не мог, блокирует кто-то другой.
Если какой-нибудь myisam - то разумеется все они дерутся за табличную блокировку.
|