2016-02-10 2 views
2

У меня есть таблица с повторяющимися записями от column «image_url» Теперь я хочу удалить только дубликаты и сохранить только одну запись каждого?Ошибка: превышено время ожидания ожидания ожидания; try restarting transaction/Limit Удалить запрос с присоединением

вот мой запрос я попробовал:

DELETE t1 
FROM 
    ad_images_copy t1 
JOIN ad_images_copy t2 ON t2.image_url = t1.image_url 
AND t2.id < t1.id 

reference link for remove duplicate rows но дал мне error

Ошибка: Тайм-аут блокировки ожидания превышено; попробуйте перезапустить транзакцию

Теперь я хочу ограничить этот запрос, потому что у меня много записей.

Я попробовал, добавив limit в последний, но он не работает для меня.

DELETE t1 
    FROM 
     ad_images_copy t1 
    JOIN ad_images_copy t2 ON t2.image_url = t1.image_url 
    AND t2.id < t1.id 
limit 100 ; 

help если какой-либо другой способ это сделать.

+1

Это поле проиндексировано на обе таблицы? –

ответ

1

Необходимо проверить, что image_url и id индексируются на обеих таблицах. (Вероятно, id является основным ключом, поэтому он будет проиндексирован, но вы должны проверить, что индексируется image_url.) Если нет, добавьте индексы.

Если это так, вы можете попробовать избежать блокировки, выполнив это в два этапа. Являются ли ваши строки неизменными? Если да, то вы можете использовать запрос SELECT, чтобы найти все строки, которые вы хотите удалить, а затем использовать некоторые пакеты DELETE s, чтобы избавиться от них. Это означает, что вы не закончите блокировку всей таблицы.

Это безопасно сделать это таким образом до тех пор, как вы знаете, что строки вы смотрите не собирается менять, или удаляются из t2 между SELECT и DELETE.

+0

no image_url не индексируется и в настоящее время он имеет повторяющиеся записи, теперь как я могу добавить индекс на него – Haseeb

+0

Ах, вам нужно проиндексировать его на обе таблицы! 'ALTER TABLE \' t1 \ 'ADD INDEX \' idx_image_url \ '(\' image_url \ ')' должен делать это для 't1' и аналогично для' t2'. Это займет некоторое время. –

+0

Я пробовал это несколько раз, но он дал мне ошибку ПОТЕРЯННОЕ СОЕДИНЕНИЕ К СЕРВЕРУ MYSQL ВО ВРЕМЯ QURING .. – Haseeb

Смежные вопросы