Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menghapus Baris Duplikat dari Tabel MySql

Anda memiliki sejumlah opsi.

Biarkan DB yang bekerja

Buat salinan tabel Anda dengan indeks unik - lalu masukkan data ke dalamnya dari tabel sumber Anda:

CREATE TABLE clean LIKE pst_nw;
ALTER IGNORE TABLE clean ADD UNIQUE INDEX (add1, add2, add3, add4);
INSERT IGNORE INTO clean SELECT * FROM pst_nw;
DROP TABLE pst_nw;
RENAME TABLE clean pst_nw;

Keuntungan melakukan hal-hal dengan cara ini adalah Anda dapat memverifikasi bahwa tabel baru Anda benar sebelum menjatuhkan tabel sumber Anda. Kerugiannya adalah membutuhkan ruang dua kali lebih banyak dan (relatif) lambat untuk dieksekusi.

Biarkan DB melakukan pekerjaan #2

Anda juga dapat mencapai hasil yang Anda inginkan dengan melakukan:

set session old_alter_table=1;
ALTER IGNORE TABLE pst_nw ADD UNIQUE INDEX (add1, add2, add3, add4);

Perintah pertama diperlukan sebagai solusi untuk tanda abaikan menjadi .. diabaikan

Keuntungannya di sini adalah tidak ada masalah dengan tabel sementara - kerugiannya adalah Anda tidak dapat memeriksa apakah pembaruan Anda melakukan persis seperti yang Anda harapkan sebelum Anda menjalankannya.

Contoh:

 CREATE TABLE `foo` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `one` int(10) DEFAULT NULL,
  `two` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

insert into foo values (null, 1, 1);
insert into foo values (null, 1, 1);
insert into foo values (null, 1, 1);

select * from foo;
+----+------+------+
| id | one  | two  |
+----+------+------+
|  1 |    1 |    1 |
|  2 |    1 |    1 |
|  3 |    1 |    1 |
+----+------+------+
3 row in set (0.00 sec)

set session old_alter_table=1;
ALTER IGNORE TABLE foo ADD UNIQUE INDEX (one, two);

select * from foo;
+----+------+------+
| id | one  | two  |
+----+------+------+
|  1 |    1 |    1 |
+----+------+------+
1 row in set (0.00 sec)

Jangan lakukan hal semacam ini di luar DB

Terutama dengan 40 juta baris melakukan sesuatu seperti ini di luar db kemungkinan akan memakan banyak waktu, dan mungkin tidak selesai sama sekali. Solusi apa pun yang tetap berada di db akan lebih cepat, dan lebih kuat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menggunakan jeda baris di Flex dengan string PHP

  2. Tampilan MySQL

  3. Ulangi hingga kode sandi unik

  4. Spring JDBC menggunakan file application.properties

  5. Ingin membatasi nilai bidang MySQL ke rentang tertentu (Nilai desimal)