select * from table1 where ID in (
select min(a.ID) from (select * from table1) a group by id_x, id_y, col_z having count(*) > 1)
Вышеупомянутый запрос выполнялся за 2,2 секунды, возвращая четыре результата.Теперь, когда я изменяю select *
на delete
, он зависает бесконечно.
delete from table1 where ID in (
select min(a.ID) from (select * from table1) a group by id_x, id_y, col_z having count(*) > 1)
Если я переместу позицию предложения group by
в запросе выбора псевдонима, он больше не будет зависать.
delete from table1 where ID in (
select a.ID from (select min(ID) from table1 group by id_x, id_y, col_z having count(*) > 1) a)
Почему он зависает? Несмотря на то, что (select * from table1)
извлекает миллионы записей, кажется, что запрос не прекращается в течение нескольких часов.Кто-нибудь может объяснить, что мешает запросу?Меня это озадачивает, потому что запрос на выборку работает нормально, тогда как запрос на удаление зависает.
РЕДАКТИРОВАТЬ: Мой фокус здесь - почему он зависает.Я уже разместил обходной путь, который отлично работает.Но для того, чтобы разработать систему профилактики, мне нужно выяснить причину этого ..