Mengalih Keluar Pendua dengan Indeks Unik
Dalam usaha untuk menghalang pemasukan data pendua, indeks biasa telah tersilap dicipta untuk medan A, B, C, dan D, mengakibatkan kehadiran rekod pendua dalam jadual rekod 20 juta. Timbul persoalan: adakah penambahan indeks unik untuk medan ini akan mengalih keluar pendua tanpa menjejaskan yang sedia ada?
Membetulkan Indeks dan Mengendalikan Pendua
Menambah indeks unik dengan Penyataan ALTER TABLE tanpa pengubahsuai IGNORE akan gagal kerana rekod unik sudah wujud. Walau bagaimanapun, menggunakan pengubah suai IGNORE akan mengalih keluar pendua.
Pendekatan Alternatif untuk MySQL Versi 5.7.4 dan Ke Atas
Untuk MySQL versi 5.7.4 dan ke atas, di mana Pengubah suai IGNORE tidak disokong, pendekatan berbeza disyorkan:
Sintaks untuk Mengalih Keluar Pendua dengan INSERT IGNORE
<code class="sql">CREATE TABLE tmp_data SELECT * FROM mytable; TRUNCATE TABLE mytable; ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D); INSERT IGNORE INTO mytable SELECT * FROM tmp_data; DROP TABLE tmp_data;</code>
Pertimbangan Tambahan
Dokumentasi tidak menyatakan baris pendua yang akan dikekalkan selepas menggunakan pengubahsuai IGNORE. Adalah dinasihatkan untuk menguji ini pada set data yang lebih kecil sebelum menggunakan penyelesaian pada jadual besar.
Atas ialah kandungan terperinci Bolehkah Indeks Unik Mengeluarkan Pendua dalam Jadual dengan Pendua Sedia Ada, dan Bagaimana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!