Это ваш запрос:
update table
set data_status = 0
where duplicated_field in (select duplicated_field
from table
group by duplicated_field
having count(duplicated_field) > 1
) and
time not in (select max(time)
from table
group by duplicated_field
having count(duplicated_field) > 1
);
Я не думаю, что это то, что вы хотите.Есть две проблемы.Во-первых, not in
с подзапросами опасно.Если подзапрос возвращает любое значение NULL
, то ни одна строка не совпадает вообще.Во-вторых, это смутное время.Таким образом, время из одного duplicated_field
может совпадать с максимальным временем из другого.
Я бы ожидал коррелированный подзапрос.Итак:
update table
set data_status = 0
where time < (select max(t2.time)
from table t2
where t2.duplicated_field = t.duplicated_field
);
Почему это быстрее в базе данных.Базы данных предназначены для эффективной обработки данных.У них есть несколько механизмов для повышения производительности, включая множество продвинутых алгоритмов, индексов и оптимизаторов запросов.Кроме того, перемещение данных в Python может быть ресурсоемким процессом.