Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Xóa các hàng trùng lặp khỏi bảng MySql

Bạn có một số tùy chọn.

Hãy để DB thực hiện công việc

Tạo một bản sao bảng của bạn với một chỉ mục duy nhất - rồi chèn dữ liệu vào bảng đó từ bảng nguồn của bạn:

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;

Lợi thế của việc làm theo cách này là bạn có thể xác minh rằng bảng mới của bạn là chính xác trước khi loại bỏ bảng nguồn của bạn. Điểm bất lợi là nó chiếm gấp đôi dung lượng và (tương đối) chậm để thực thi.

Để DB thực hiện công việc # 2

Bạn cũng có thể đạt được kết quả mình muốn bằng cách:

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

Lệnh đầu tiên được yêu cầu như một giải pháp thay thế cho cờ bỏ qua bị .. bỏ qua

Ưu điểm ở đây là không có sự xáo trộn với một bảng tạm thời - nhược điểm là bạn không thể kiểm tra xem bản cập nhật của mình có đúng như những gì bạn mong đợi trước khi chạy hay không.

Ví dụ:

 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)

Không làm điều này bên ngoài DB

Đặc biệt là với 40 triệu hàng, việc làm như thế này bên ngoài db có thể sẽ mất rất nhiều thời gian và có thể không hoàn thành. Bất kỳ giải pháp nào vẫn còn trong db sẽ nhanh hơn và mạnh mẽ hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nơi tập hợp Kết quả được lưu trữ trong khi làm việc với jdbc và trình điều khiển oracle

  2. Bạn muốn đề xuất mẫu thiết kế phiên bản nào

  3. Cách sử dụng các biến trong mệnh đề WHERE cho truy vấn SQL SELECT

  4. Mysql Where ... In ... AND where ... in ... chỉ nên khớp trên cùng một chỉ mục

  5. Cần trợ giúp về cách bỏ chia sẻ trong mysql với nhiều cột ngày