2017-09-18 71 views
-2

我有一個包含數百萬條記錄的表。我必須確保記錄是獨一無二的。我想知道SELECT.. where是更好還是DELETE..whereMYSQL:選擇或刪除,這在性能方面更好,以避免重複

問題更新:我只想保留唯一的記錄。

進一步更新

我正在運行的線程和一些未知的原因,他們儘管檢查......最可能是由於選擇的同時運行的插在tabke的DUP。因此要求如果檢查記錄存在是否比僅刪除匹配記錄的行更昂貴?

+1

的問題是不明確的。你只想顯示唯一記錄還是隻想存儲唯一記錄? –

+0

或者你只是想要一個是/否的關於他們是否都是獨一無二的?對所有可能的問題都有答案;我不想啓動回答錯誤的問題。 –

+0

@RickJames我正在運行線程,並且由於某些未知的原因,他們插入duke在tabke中,儘管檢查...最有可能是由於同時運行「SELECT」。因此,問如果檢查記錄存在是否比簡單刪除匹配記錄的行更昂貴? – Volatil3

回答

0

使用INSERT IGNORE可以避免在偶然插入兩次相同記錄時出現有關重複鍵的錯誤。

注意:只檢查任何UNIQUE

不過...。那指出,你_DO沒有UNIQUE鍵,以防止重複擺在首位(包括'PRIMARY KEY,如果指定。)!

所以,你的下一個問題將是如何添加一個UNIQUE密鑰,當已經有重複。正確。

試圖發現重複並刪除它們是複雜而乏味的,但可能會更快。

這是直截了當:

CREATE TABLE new LIKE real; 
ALTER TABLE new ADD UNIQUE ... -- some UNIQUE KEY to avoid duplicates 
# stop writes to `real` -- application-specific 
INSERT IGNORE INTO new SELECT * FROM real; 
RENAME TABLE real TO old, 
      new TO real; 
# allow writes again. 
DROP TABLE old; 
+0

我有'自動增量'的ID字段,重複字段是'URL'字段。 – Volatil3