「縮小」しようとするこの大規模なデータベース(1 TBを超える)があります。データベースは1つの主要なエンティティを中心に展開するため、「訪問」と呼びましょう。議論のために、それが医療行為のデータベースであるとしましょう。
手続き、年次、フォローアップ、予防接種など、合計30の訪問「タイプ」があり、それぞれが「visit_immuno」などの「Visit」への補助表です。
データベースには、2000年以降約12年間のデータが蓄積されています。「ライブ」バージョンに約3年間のデータを保持し、残りを「old_data」データベースに保持することを提案する人がいます。日付は正規化されているため、「Visit」テーブルにのみ保存されます。Visitテーブルには、ROWVERSION
列とBIGINT
疑似ID(クラスター化)列も含まれます。すべての意図と目的のために、クラスタリングキーにSEQUENCE(SQL Server 2012 Enterprise)が入力されているとしましょうcid
。
visit.date
医師がデータの彼の「ブリーフケース」を拡張訪問し、リターンになったとき、それはメインテーブルにマージされます例えば、クラスタリング・キーと同じ順序で常にではありません。また、「visit」テーブルにいくつかの更新があり、ROWVERSION
列がcid
とdate
列の両方と同期しなくなります-簡単に言えば、この理由のために適切なパーティションキーを作成することもできROWVERSION
ませんcid
。
「ライブ」からデータを取り出すためのビジネスルールは、ということであるvisit.date
36ヶ月よりも大きくなければなりませんし、子visit_payment
レコードが存在している必要があります。また、「old_data」データベースには、を除くベーステーブルは含まれていませんvisit%
。
したがって、次のようになります。
Live DB(毎日使用)-すべてのテーブルOld-Data DB- visit%
テーブルの古いデータ
提案では、2つのデータベースのテーブル全体でALLを結合するビュー(およびを除く)のすべてのベーステーブルに対するシノニムを含むシェルである結合DBが必要です。Live DB
visit%
visit%
同じインデックスがOld-Data
DBに作成されていると仮定すると、クエリはUNION-ALL ビューで適切に実行されますか?UNION-ALL ビューの実行計画をどのような種類のクエリパターンがトリップするか?