Carduelis
@Carduelis
Web-developer, front-end, js, less

Магия mySQL, или почему DELETE длится вечность?

Есть таблица с 100000 записями. Таблица выглядит следующим образом:
incrementdata [text]dataId [varchar45]userId [int11]
Делаем запрос на удаленичя полей с вложенным селектом из другой таблицы.
DELETE 
	FROM userdata 
	WHERE dataId in (
		SELECT concat('ufi',dbIncrement) 
		FROM ufields 
		WHERE podvedId='val' 
			and formId='val' 
			and parentContainerId='val' 
			and (descriptor_x='val' or descriptor_y='val')
	)
// очень долго выполняется, сервер падает

По отдельности запросы выполняются быстро, но в едином запросе, выполнение кладет сервер.
Пробовали индексировать поля по которым происходит выборка, но на время выполнения это никак не повлияло.
В чем может быть причина такого поведения? Почему простейший DELETE, который должен удалить два поля, кладет сервер?
  • Вопрос задан
  • 626 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
DELETE `ud`.*
  FROM `userdata` AS `ud`
  JOIN `ufields` AS `uf` 
    ON `ud`.`dataId` = CONCAT('ufi', `uf`.`dbIncrement`) 
    AND `uf`.`podvedId` = 'val' 
    AND `uf`.`formId` = 'val' 
    AND `uf`.`parentContainerId` = 'val' 
    AND (`uf`.`descriptor_y` = 'val' OR `uf`.`descriptor_y` = 'val')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
art_karetnikov
@art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.
Запихните результат во временную таблицу и сделайте выборку из нее. Где уже не надо будет выполнять concat.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы