ホームページ >データベース >mysql チュートリアル >Netezza で一意の識別子を使用せずに重複行を効率的に削除するにはどうすればよいですか?
一意のキーを持たない Netezza での重複行の削除
大きなテーブル内の重複データは、ストレージとデータ品質に影響を与えます。 一意の識別子を持たずにこれらの重複を削除することは困難です。行番号を使用するような手法 (標準 SQL で一般的) は Netezza には直接適用できませんが、非常に効果的な代替手段が存在します。
Netezza アプローチ: DELETE
コマンドの活用
Netezza は、USING
ステートメント内で DELETE
キーワードを使用する強力なソリューションを提供します。 次の例を考えてみましょう:
<code class="language-sql">DELETE FROM table_with_dups T1 USING table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.column1 = T2.column1 AND T1.column2 = T2.column2 -- ... add more columns as needed ...</code>
このクエリは、table_with_dups
内の各行 (T1) を他のすべての行 (T2) と比較します。 ctid
(行 ID) の値に基づいて、古い重複行を識別して削除します。 AND
条件により、指定された列に同じ値を持つ行のみが重複とみなされます。
削除前のプレビュー
DELETE
コマンドを実行する前に削除予定の行を確認するには、DELETE
を SELECT *
に置き換え、USING
キーワードをカンマに置き換えます。
<code class="language-sql">SELECT * FROM table_with_dups T1, table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.column1 = T2.column1 AND T1.column2 = T2.column2 -- ... add more columns as needed ...</code>
パフォーマンスの最適化
最適なパフォーマンスを得るには、サブクエリのオーバーヘッドによりプロセスが大幅に遅くなる可能性がある NOT IN
句を避けてください。 ここで説明する USING
メソッドは、ほとんどのシナリオで優れた速度を提供します。
NULL 値の処理
キー列に NULL
値が含まれている場合は、COALESCE()
句内で WHERE
関数を使用して、正確な比較を保証します。
<code class="language-sql"> AND COALESCE(T1.col_with_nulls, '[NULL]') = COALESCE(T2.col_with_nulls, '[NULL]') ``` This treats `NULL` values consistently. Replace `col_with_nulls` with the actual column name. Remember to adjust the column list in the `WHERE` clause to include all relevant columns for duplicate identification.</code>
以上がNetezza で一意の識別子を使用せずに重複行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。