2016-02-10 111 views
2

我有一種對column重複條目表「image_url」現在我只想刪除重複項,只保留各一個的記錄?錯誤:超出鎖定等待超時;請嘗試重新啓動交易/限制刪除查詢與加入

這裏是我的查詢我想:

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 ; 

幫助如果有其他方式來做到這一點。

+1

該字段是否在兩個表上都被索引? –

回答

1

一兩件事來檢查是image_urlid是在兩個表索引。 (可能id是主鍵,因此它將被編入索引,但您應該檢查image_url已編入索引。)如果不是,請添加索引。

如果是的話,你可以嘗試通過分兩步做避免了鎖定。你的行是不可變的嗎?如果是這樣,那麼你可以使用一個SELECT查詢找到所有你想要刪除的行,然後使用一些批量DELETE s到擺脫他們。這意味着你不會鎖定整個桌子。

它是安全的,只要做到這一點這樣,你知道你看行不打算改變,或從t2得到拆除,SELECTDELETE之間。

+0

沒有IMAGE_URL沒有被索引,目前它有重複的項目,現在,我怎麼加就可以了 – Haseeb

+0

AH指數,則需要建立索引兩個表! 'ALTER TABLE \'t1 \'ADD INDEX \'idx_image_url \'(\'image_url \')'應該爲't1'完成,''t2'也是如此。這需要一些時間。 –

+0

我試過多次,但它給我的錯誤連接到MYSQL服務器在修正期間.. – Haseeb

相關問題