Tenemos esta gran base de datos (> 1TB) que pretendemos "reducir". La base de datos gira en torno a una entidad principal, llamémosla "Visita". Para la discusión, digamos que es una base de datos para una práctica médica.
Hay un total de 30 "tipos" de visita, como procedimiento, anual, seguimiento, inmunización, etc. Cada uno de ellos es una tabla secundaria para "Visita", por ejemplo, "visit_immuno".
La base de datos ha acumulado unos 12 años de datos desde 2000. Alguien ha propuesto que mantengamos unos 3 años de datos en la versión "en vivo" y que el resto viva en una base de datos "old_data". La fecha SOLO se almacena en la tabla "Visita" ya que está normalizada. La tabla Visita también contiene una ROWVERSION
columna y una columna BIGINT
de pseudoidentidad (agrupada). Para todos los efectos, supongamos que la clave de agrupación está poblada por una SECUENCIA (SQL Server 2012 Enterprise): la nombraremos cid
.
El visit.date
no es siempre en el mismo orden que la clave de agrupación, por ejemplo, cuando un médico va en las visitas extendidas y regresa con su "maletín" de datos, que se combinó en la tabla principal. También hay algunos cambios a la tabla "visita" que hará que la ROWVERSION
columna que se va fuera de sincronía con los dos cid
y date
columnas - en pocas palabras, ni ROWVERSION
tampoco cid
harían claves de partición adecuados para ello.
La regla empresarial para eliminar datos de la "vida" es que visit.date
debe ser mayor de 36 meses yvisit_payment
debe existir un registro secundario . Además, la base de datos "old_data" no contiene ninguna de las tablas base, excepto visit%
.
Entonces terminamos con:
Live DB (uso diario): todas las tablas DB de datos antiguos: datos anteriores para las visit%
tablas
La propuesta requiere una base de datos combinada que sea un shell que contenga sinónimos para TODAS las tablas base en Live DB
(exceptovisit%
) más Vistas que UNIONEN TODAS en las visit%
tablas en las dos bases de datos.
Suponiendo que se crean los mismos índices en la base de Old-Data
datos, ¿las consultas funcionarán bien en las vistas UNION-ALL ? ¿Qué tipo de patrones de consulta podrían disparar el plan de ejecución para UNION-ALL? vistas ?