Nous avons cette grande base de données (> 1 To) que nous avons l'intention de "réduire". La base de données s'articule autour d'une entité principale, appelons-la "Visite". Pour la discussion, disons qu'il s'agit d'une base de données pour un cabinet médical.
Il existe un total de 30 "types" de visites, telles que la procédure, annuelle, de suivi, de vaccination, etc., chacune étant un tableau de subvention pour "Visite", par exemple "visit_immuno".
La base de données a accumulé environ 12 ans de données depuis 2000. Quelqu'un a proposé que nous conservions environ 3 ans de données dans la version "en direct" et que le reste se trouve dans une base de données "old_data". La date est stockée UNIQUEMENT dans la table "Visite" car elle est normalisée. La table Visit contient également une ROWVERSION
colonne et une colonne de BIGINT
pseudo-identité (en cluster). À toutes fins utiles, disons que la clé de clustering est remplie par une SEQUENCE (SQL Server 2012 Enterprise) - nous la nommerons cid
.
La visit.date
clé n'est pas toujours dans le même ordre que la clé de clustering, par exemple lorsqu'un médecin effectue des visites prolongées et revient avec sa "mallette" de données, elle est fusionnée dans la table principale. Il y a aussi quelques mises à jour de la table "visit" qui entraîneront la ROWVERSION
désynchronisation de la colonne avec les colonnes cid
et date
- pour le dire simplement, ni ROWVERSION
ne cid
feraient des clés de partition appropriées pour cette raison.
La règle commerciale pour supprimer des données du "live" est que le visit.date
doit être supérieur à 36 mois et qu'un visit_payment
enregistrement enfant doit exister. En outre, la base de données "old_data" ne contient aucune des tables de base sauf visit%
.
On se retrouve donc avec:
Live DB (utilisation quotidienne) - Toutes les tables Old-Data DB - anciennes données pour les visit%
tables
La proposition appelle une base de données combinée qui est un interpréteur de commandes contenant des synonymes de TOUTES les tables de base dans Live DB
(sauf visit%
) plus des vues qui UNIONS TOUTES sur les visit%
tables des deux bases de données.
En supposant que les mêmes index sont créés dans la base de Old-Data
données, les requêtes fonctionneront-elles bien sur les vues UNION-ALL ? Quels types de modèles de requête peuvent déclencher le plan d'exécution pour les vues UNION-ALL ?