Eu tive um problema semelhante - grandes arquivos simples importados para o banco de dados uma vez por dia. A maioria dos dados é imutável.
Adicione duas colunas extras à tabela, data_inicial e data_final. O valor padrão para data_final deve ser em algum momento no futuro.
Para comparar um arquivo com o próximo, classifique-os pelas colunas-chave e leia uma linha de cada arquivo.
- Se as chaves forem iguais:compare o restante das colunas para ver se os dados foram alterados. Se os dados da linha forem iguais, a linha já está no banco de dados e não há nada a fazer; se for diferente, atualize a linha existente no banco de dados com uma data_final de hoje e insira uma nova linha com uma data_inicial de hoje. Leia uma nova linha de ambos os arquivos.
- Se a chave do arquivo antigo for menor:a linha foi excluída. Atualize a data_final para hoje. Leia uma nova linha do arquivo antigo.
- Se a chave do novo arquivo for menor:uma linha foi inserida. Insira a linha no banco de dados com uma data_inicial de hoje. Leia uma nova linha do novo arquivo.
Repita até ler tudo de ambos os arquivos.
Agora para consultar as linhas que eram válidas em qualquer data, basta selecionar com uma cláusula where test_date entre start_date e end_date.