Temos esse banco de dados grande (> 1 TB) que pretendemos "encolher". O banco de dados gira em torno de uma entidade principal, vamos chamá-lo de "Visita". Para discussão, digamos que seja um banco de dados para uma prática médica.
Há um total de 30 "tipos" de visita, como procedimento, anual, acompanhamento, imunização etc., cada um dos quais é uma tabela subsidiária para "Visita", por exemplo, "visit_immuno".
O banco de dados acumulou cerca de 12 anos de dados desde 2000. Alguém propôs que mantivéssemos cerca de 3 anos de dados na versão "ao vivo" e que o restante permanecesse no banco de dados "dados antigos". A data é armazenada SOMENTE na tabela "Visita", pois é normalizada. A tabela Visita também contém uma ROWVERSION
coluna e uma coluna de BIGINT
pseudo-identidade (em cluster). Para todos os efeitos, digamos que a chave de cluster seja preenchida por uma SEQUENCE (SQL Server 2012 Enterprise) - vamos chamá-la cid
.
A visit.date
não é sempre na mesma ordem que a chave de cluster, por exemplo, quando um médico vai em visitas prolongadas e retorna com sua "pasta" de dados, ele é incorporado a mesa principal. Há também algumas atualizações para a tabela de "visita" que fará com que a ROWVERSION
coluna para estar fora de sincronia com os dois cid
e date
colunas - para colocá-lo simplesmente, nem ROWVERSION
nem cid
faria chaves de partição apropriados por este motivo.
A regra de negócios para remover dados do "ativo" é que ele visit.date
deve ser maior que 36 meses e um visit_payment
registro filho deve existir. Além disso, o banco de dados "old_data" não contém nenhuma das tabelas base, exceto visit%
.
Então, acabamos com:
Banco de dados dinâmico (uso diário) - todas as tabelas Banco de dados antigo - dados mais antigos para as visit%
tabelas
A proposta solicita um banco de dados combinado que é um shell que contém sinônimos para TODAS as tabelas base nas Live DB
(exceto visit%
) mais exibições que UNIONAM TODAS as visit%
tabelas nos dois bancos de dados.
Supondo que os mesmos índices sejam criados no Old-Data
banco de dados, as consultas terão bom desempenho nas exibições UNION-ALL ? Que tipo de padrões de consulta pode desarmar o plano de execução das exibições UNION-ALL ?