Saya perlu melacak item yang dihapus untuk kebutuhan sinkronisasi klien.
Secara umum, apakah lebih baik menambahkan tabel batu nisan dan pemicu yang melacak ketika baris dihapus dari database server - pada dasarnya menambahkan baris baru ke tabel batu nisan dengan data dari item yang dihapus - atau untuk menjaga item dalam tabel asli dan tandai sebagai dihapus, biasanya dengan kolom bit jenis, untuk menunjukkan bahwa baris dihapus dan kolom lain untuk dilacak ketika penghapusan terjadi?
Mungkin Anda harus menggabungkan kedua metode ini dengan sengaja. Kenapa ???
Mari kita gunakan tabel itu (MySQL-dialek)
Harap perhatikan bahwa, dengan pengecualian dari KUNCI UTAMA, setiap indeks yang Anda buat harus didahului dengan
deleted
bendera dan diakhiri denganid
.Mari kita buat tabel batu nisan
Jika meja Anda sudah memiliki
deleted
bendera, Anda bisa mengisi tabel batu nisanOK sekarang data dan nisan sudah disiapkan. Bagaimana Anda melakukan penghapusan?
Katakanlah Anda menghapus setiap orang di kode pos 07305. Anda akan menjalankan yang berikut:
OK ini sepertinya banyak overhead baik cara Anda melihatnya.
Sekarang, apakah Anda ingin melihat semua data yang dihapus? Berikut ini dua cara berbeda:
SELECT * FROM mydata WHERE deleted=1;
SELECT B.* FROM mytomb A INNER JOIN mydata B USING (id);
Jika jumlah id di mytomb lebih besar dari 5% dari jumlah baris mydata, itu adalah pemindaian tabel penuh. Jika tidak, pemindaian indeks dengan pencarian untuk setiap baris. Catat tolok ukur apa pun dalam hal ini. Cari menjelaskan rencana.
Sekarang, apakah Anda ingin melihat setiap orang di kode pos 07304? Berikut ini dua cara berbeda:
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'
Bagaimana dengan penghapusan massal? Berikut ini dua cara berbeda:
DELETE FROM mydata WHERE deleted=1;
DELETE B.* FROM mytomb A INNER JOIN mydata B USING (id); DELETE FROM mytomb;
KESIMPULAN
Sekarang, saya tidak mengatakan untuk tetap menggunakan kedua metode ini. Melakukan hal ini dari waktu ke waktu mengungkapkan metode mana yang lebih cepat dalam hal operabilitas keseluruhan. Anda harus memutuskan tolok ukur mana untuk meminta data langsung, meminta data yang dihapus, dan penghapusan masal paling sesuai untuk Anda.
sumber