MYSQL. Проблема с дублями, как решить?

Есть примерно такой запрос. На таблицах < 100к строк, запрос отлично отрабатывается. Но как только я подсовываю таблицу на 5 миллионов строк, я получаю тайм-ауты, какие либо не ставил.

И даже проблему я вижу, при большом объеме строк, происходит умножение итераций (5 000 000 * 5 000 000 = печаль моего сервера).

Вопрос, как переписать такой запрос? Чтобы можно было детектировать дубли и для дублей установить родителя. Удалять дубли нельзя, дробить тоже.
UPDATE `a[tmp]` AS tt
	INNER JOIN (
		SELECT
			`id`,
			`a`,
			`b`
		FROM `a[tmp]`
	) AS tr

	ON
		tt.`a` = tr.`a`
		AND
		tt.`b` = tr.`b`
		AND
		tt.`id` > tr.`id`

	SET tt.`type` = 'del', tt.`par_id` = tt.`id` > tr.`id`
  • Вопрос задан
  • 266 просмотров
Пригласить эксперта
Ответы на вопрос 1
svd71
@svd71
Нда.
Я так понимаю, что первичный ключ в столбце id.
Поробуйте с делать так:
Update atmp tt set
 Type = iif( (exist (select * from atmp tt1 where tt.a=tt1.a and tt.b=tt1.b and tt.id < tt1.id)), 'del', ''),
Par_id = (select id from atmp tt1 where tt.a=tt1.a and tt.b=tt1.b and tt.id < tt1.id)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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