Menghapuskan Baris Pendua dalam Netezza Tanpa Kekunci Unik
Data pendua dalam jadual besar memberi kesan kepada kualiti storan dan data. Mengalih keluar pendua ini tanpa pengecam unik memberikan cabaran. Walaupun teknik seperti menggunakan nombor baris (biasa dalam SQL standard) tidak digunakan secara langsung dalam Netezza, alternatif yang sangat berkesan wujud.
Pendekatan Netezza: Memanfaatkan DELETE
Perintah
Netezza menawarkan penyelesaian yang berkuasa menggunakan kata kunci USING
dalam pernyataan DELETE
. Pertimbangkan contoh ini:
<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>
Pertanyaan ini membandingkan setiap baris (T1) dengan semua baris lain (T2) dalam table_with_dups
. Ia mengenal pasti dan memadamkan baris pendua yang lebih lama berdasarkan nilai ctid
(ID baris) mereka. Syarat AND
memastikan bahawa hanya baris dengan nilai yang sama dalam lajur tertentu dianggap pendua.
Pratonton Sebelum Pemadaman
Untuk menyemak baris yang dijadualkan untuk pemadaman sebelum melaksanakan perintah DELETE
, gantikan DELETE
dengan SELECT *
dan kata kunci USING
dengan koma:
<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>
Pengoptimuman Prestasi
Untuk prestasi optimum, elakkan klausa NOT IN
, yang boleh melambatkan proses dengan ketara disebabkan overhed subkueri. Kaedah USING
yang ditunjukkan di sini memberikan kelajuan yang lebih baik dalam kebanyakan senario.
Mengendalikan Nilai NULL
Jika mana-mana lajur utama mengandungi nilai NULL
, gunakan fungsi COALESCE()
dalam klausa WHERE
untuk memastikan perbandingan yang tepat:
<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>
Atas ialah kandungan terperinci Bagaimana Mengeluarkan Baris Pendua dengan Cekap dalam Netezza Tanpa Pengecam Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!