Имах подобен проблем - големи плоски файлове се импортират в базата данни веднъж на ден. Повечето от данните са непроменени.
Добавете две допълнителни колони към таблицата, начална_дата и крайна_дата. Стойността по подразбиране за ending_date трябва да бъде някъде в бъдещето.
За да сравните един файл със следващия, сортирайте ги и двата по ключовите колони, след което прочетете един ред от всеки файл.
- Ако ключовете са еднакви:сравнете останалите колони, за да видите дали данните са се променили. Ако данните в реда са равни, редът вече е в базата данни и няма какво да се прави; ако е различен, актуализирайте съществуващия ред в базата данни с крайна_дата от днес и вмъкнете нов ред с начална_дата от днес. Прочетете нов ред от двата файла.
- Ако ключът от стария файл е по-малък:редът е изтрит. Актуализирайте ending_date до днес. Прочетете нов ред от стария файл.
- Ако ключът от новия файл е по-малък:вмъкнат е ред. Вмъкнете реда в базата данни с начална_дата днес. Прочетете нов ред от новия файл.
Повторете, докато прочетете всичко и от двата файла.
Сега, за да направите заявка за редовете, които са били валидни на която и да е дата, просто изберете с клауза where test_date между start_date и end_date.