2017-09-18 6 views
-2

私は何百万ものレコードを持つテーブルを持っています。レコードが一意であることを確認する必要があります。私はSELECT.. whereが良いかDELETE..whereかと思いますか?MYSQL:重複を避けるためにパフォーマンス面で優れているSELECTまたはDELETE

質問の更新:ユニークな記録のみを残したいと思います。

私はスレッドを実行しているし、いくつかの未知の理由のために、彼らは最もおそらくSELECTの同時実行に...チェックのにもかかわらず、tabkeでDUPを挿入する

さらに更新。レコードの存在をチェックするだけでレコードに一致するレコードを削除するよりも費用がかかりますか?

+1

質問があいまいです。一意のレコードのみを表示するか、一意のレコードのみを保存しますか? –

+0

あなたは単にそれらがすべてユニークであるかどうかに関してイエス/ノーを欲しいですか?考えられるすべての質問に対する回答があります。私は間違った質問に答えることに着手したくない。 –

+0

@RickJames私はスレッドを実行していますが、いくつかの未知の理由で、タブキンにdupsを挿入していますが、チェックにもかかわらず、おそらく 'SELECT'が同時に実行されているためです。だからレコードの存在をチェックするだけでレコードにマッチするレコードを削除するよりもコストがかかりますか? – Volatil3

答えて

0

誤って同じレコードを2回挿入した場合の重複キーに関するエラーを避けるには、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

私は 'AUTO INCREMENT'である' ID'フィールドを持っています、重複フィールドは 'URL'フィールドです。 – Volatil3

関連する問題