Miałem podobny problem - duże pliki płaskie importowane do bazy raz dziennie. Większość danych pozostaje niezmienna.
Dodaj dwie dodatkowe kolumny do tabeli, data_początkowa i data_końcowa. Domyślna wartość ending_date powinna być w przyszłości.
Aby porównać jeden plik z drugim, posortuj je według kluczowych kolumn, a następnie odczytaj jeden wiersz z każdego pliku.
- Jeśli klucze są równe:porównaj pozostałe kolumny, aby sprawdzić, czy dane się zmieniły. Jeśli dane wiersza są równe, wiersz jest już w bazie danych i nie ma nic do zrobienia; jeśli jest inny, zaktualizuj istniejący wiersz w bazie danych o dzisiejszą datę_końcową i wstaw nowy wiersz z dzisiejszą datą_początkową. Przeczytaj nowy wiersz z obu plików.
- Jeżeli klucz ze starego pliku jest mniejszy:wiersz został usunięty. Zaktualizuj ending_date do dzisiaj. Przeczytaj nowy wiersz ze starego pliku.
- Jeżeli klucz z nowego pliku jest mniejszy:wstawiono wiersz. Wstaw wiersz do bazy danych z datą początkową dzisiejszą. Przeczytaj nowy wiersz z nowego pliku.
Powtarzaj, aż przeczytasz wszystko z obu plików.
Teraz, aby wyszukać wiersze, które były prawidłowe w dowolnym dniu, po prostu wybierz z klauzulą WHERE test_date między datą_początkową a datą_końcową.