Muszę śledzić usunięte elementy na potrzeby synchronizacji klienta.
Zasadniczo, czy lepiej jest dodać tabelę nagrobków i wyzwalacz, który śledzi, kiedy wiersz został usunięty z bazy danych serwera - w zasadzie dodając nowy wiersz do tabeli nagrobków z danymi z usuniętego elementu - czy też zachować elementy w oryginalna tabela i oflaguj je jako usunięte, zwykle z kolumną typu bit, aby wskazać, że wiersz został usunięty, a inna kolumna do śledzenia, kiedy wystąpiło usunięcie?
Może powinieneś celowo połączyć te dwie metody. Dlaczego ???
Użyjmy tej tabeli (dialekt MySQL)
Pamiętaj, że z wyjątkiem KLUCZA PODSTAWOWEGO każdy tworzony indeks powinien być poprzedzony
deleted
flagą i kończyć się naid
.Stwórzmy stół z nagrobkami
Jeśli twój stół ma już
deleted
flagę, możesz wypełnić tabelę TommstoneOK, teraz dane i nagrobek są przygotowane. Jak przeprowadzasz usuwanie?
Załóżmy, że usuwasz każdą osobę z kodu pocztowego 07305. Uruchomiłbyś następujące:
OK, tak czy inaczej, wygląda to na duże obciążenie.
Czy chcesz teraz zobaczyć wszystkie usunięte dane? Oto dwa różne sposoby:
SELECT * FROM mydata WHERE deleted=1;
SELECT B.* FROM mytomb A INNER JOIN mydata B USING (id);
Jeśli liczba identyfikatorów w mytomb jest większa niż 5% liczby wierszy moich danych, jest to pełne skanowanie tabeli. W przeciwnym razie skan indeksu z wyszukiwaniem każdego wiersza. Zwróć uwagę na wszelkie kryteria w tym zakresie. Wyszukaj wyjaśnienie planów.
Czy chcesz teraz zobaczyć każdą osobę w kodzie pocztowym 07304? Oto dwa różne sposoby:
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'
Co powiesz na masowe usuwanie? Oto dwa różne sposoby:
DELETE FROM mydata WHERE deleted=1;
DELETE B.* FROM mytomb A INNER JOIN mydata B USING (id); DELETE FROM mytomb;
WNIOSEK
Nie mówię teraz o zachowaniu obu metod. Wykonanie tego z czasem ujawnia, która metoda jest szybsza pod względem ogólnej operacyjności. Musisz zdecydować, które testy porównawcze do sprawdzania danych na żywo, sprawdzania usuniętych danych i masowego usuwania działają najlepiej dla Ciebie.
źródło