Como lidar melhor com o armazenamento de dados históricos?

Estou tentando determinar como devo armazenar dados transacionais históricos.

Devo armazená-lo em uma única tabela em que o registro seja reinserido com um novo timestamp a cada vez?

Devo dividir os dados históricos em uma tabela 'histórico' separada e manter apenas os dados atuais na tabela 'ativa'.

Se sim, como melhor faço isso? Com um gatilho que copia automaticamente os dados para a tabela de histórico? Ou com lógica na minha aplicação?

Atualização por comentário do Welbog:

Haverá grandes quantidades de dados históricos (centenas de milhares de linhas - eventualmente potencialmente milhões)

As operações de pesquisa e relatório principalmente serão executadas nos dados históricos.

O desempenho é uma preocupação. As pesquisas não devem ter que ser executadas a noite toda para produzir resultados.

questionAnswers(2)

yourAnswerToTheQuestion