Có lẽ bạn nên kết hợp hai phương pháp trên mục đích. Tại sao ???
Hãy sử dụng bảng đó (phương ngữ MySQL)
CREATE TABLE mydata
(
id int not null auto_increment
firstname varchar(16) not null,
lastname varchar(16) not null,
zipcode char(5) not null,
...
deleted tinyint not null default 0
KEY (deleted,id),
KEY (deleted,lastname,firstname,id),
KEY (deleted,zipcode,id),
KEY (lastname,firstname),
KEY (zipcode),
PRIMARY KEY (id)
);
Xin lưu ý rằng, ngoại trừ KHÓA CHÍNH, mọi chỉ số bạn thực hiện phải được đi trước bởi deleted
cờ và kết thúc bằng dấu id
.
Hãy tạo bảng bia mộ
CREATE TABLE mytomb SELECT id FROM mydata WHERE 1=2;
ALTER TABLE mytomb ADD PRIMARY KEY (id);
Nếu bảng của bạn đã có deleted
cờ, bạn có thể điền vào bảng tommstone
INSERT INTO mytomb SELECT id FROM mydata WHERE deleted = 1;
OK bây giờ dữ liệu và bia mộ được chuẩn bị. Làm thế nào để bạn thực hiện xóa?
Giả sử bạn đang xóa mọi người trong mã zip 07305. Bạn sẽ chạy như sau:
INSERT IGNORE INTO mytomb SELECT id FROM mydata WHERE deleted=0 AND zipcode='07305';
UPDATE mydata SET deleted=1 WHERE deleted=0 AND zipcode='07305';
OK điều này có vẻ như rất nhiều chi phí cho dù bạn nhìn nó như thế nào.
Bây giờ, bạn có muốn xem tất cả các dữ liệu đã xóa? Đây là hai cách khác nhau:
SELECT * FROM mydata WHERE deleted=1;
SELECT B.* FROM mytomb A INNER JOIN mydata B USING (id);
Nếu số lượng id trong mytomb lớn hơn 5% số lượng hàng của mydata, thì đó là quét toàn bộ bảng. Mặt khác, quét chỉ mục với một tra cứu cho mỗi hàng. Lưu ý bất kỳ điểm chuẩn trong các khía cạnh này. Tra cứu các kế hoạch giải thích.
Bây giờ, bạn có muốn nhìn thấy mọi người trong mã zip 07304 không? Đây là hai cách khác nhau:
SELECT * FROM mydata WHERE deleted=1 AND zipcode='07304';
SELECT A.* FROM mydata A LEFT JOIN mytomb B USING (id) WHERE B.id IS NULL AND A.zipcode='07304'
Làm thế nào về xóa hàng loạt? Đây là hai cách khác nhau:
DELETE FROM mydata WHERE deleted=1;
DELETE B.* FROM mytomb A INNER JOIN mydata B USING (id); DELETE FROM mytomb;
PHẦN KẾT LUẬN
Bây giờ, tôi không nói để giữ cả hai phương pháp. Làm điều này theo thời gian cho thấy phương pháp nào nhanh hơn về khả năng hoạt động tổng thể. Bạn phải quyết định điểm chuẩn nào để truy vấn dữ liệu trực tiếp, truy vấn dữ liệu đã xóa và xóa hàng loạt hoạt động tốt nhất cho bạn.