我有一個包含數百萬條記錄的表。我必須確保記錄是獨一無二的。我想知道SELECT.. where
是更好還是DELETE..where
?MYSQL:選擇或刪除,這在性能方面更好,以避免重複
問題更新:我只想保留唯一的記錄。
進一步更新
我正在運行的線程和一些未知的原因,他們儘管檢查......最可能是由於選擇的同時運行的插在tabke的DUP。因此要求如果檢查記錄存在是否比僅刪除匹配記錄的行更昂貴?
我有一個包含數百萬條記錄的表。我必須確保記錄是獨一無二的。我想知道SELECT.. where
是更好還是DELETE..where
?MYSQL:選擇或刪除,這在性能方面更好,以避免重複
問題更新:我只想保留唯一的記錄。
進一步更新
我正在運行的線程和一些未知的原因,他們儘管檢查......最可能是由於選擇的同時運行的插在tabke的DUP。因此要求如果檢查記錄存在是否比僅刪除匹配記錄的行更昂貴?
使用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;
我有'自動增量'的ID字段,重複字段是'URL'字段。 – Volatil3
的問題是不明確的。你只想顯示唯一記錄還是隻想存儲唯一記錄? –
或者你只是想要一個是/否的關於他們是否都是獨一無二的?對所有可能的問題都有答案;我不想啓動回答錯誤的問題。 –
@RickJames我正在運行線程,並且由於某些未知的原因,他們插入duke在tabke中,儘管檢查...最有可能是由於同時運行「SELECT」。因此,問如果檢查記錄存在是否比簡單刪除匹配記錄的行更昂貴? – Volatil3