我们有一个打算“缩小”的大型数据库(> 1TB)。数据库围绕一个主要实体,我们称其为“访问”。为了讨论起见,假设它是医学实践的数据库。
总共有30种访问“类型”,例如程序,年度,随访,免疫等,每种类型都是“访问”的辅助表,例如“ visit_immuno”。
自2000年以来,该数据库已积累了大约12年的数据。有人建议我们在“实时”版本中保留大约3年的数据,而其余数据则保留在“ old_data”数据库中。由于日期已标准化,因此仅存储在“访问”表中。Visit表还包含一个ROWVERSION
列和一个BIGINT
伪身份(聚集)列。出于所有目的和目的,假设群集密钥由SEQUENCE(SQL Server 2012 Enterprise)填充-我们将其命名为cid
。
在visit.date
当医生的推移延长探视,并与他的数据的“公文包”的回报并不总是以相同的顺序作为聚集键,例如,它被合并到主表。“访问”表也进行了一些更新,这将导致该ROWVERSION
列与cid
和date
列不同步-简单地说,由于这个原因,它们都ROWVERSION
不会cid
创建合适的分区键。
从“活动”中删除数据的业务规则是,visit.date
必须大于36个月并且visit_payment
必须存在子记录。另外,“ OLD_DATA”数据库不包含任何基本表visit%
。
因此,我们最终得到:
直播DB(日常使用) -所有表老数据DB -对于较旧的数据visit%
表
该提案要求使用组合DB,该组合DB是一个外壳,其中包含(除外)中所有基本表的同义词以及两个数据库中所有表的UNION ALL的视图。Live DB
visit%
visit%
假设在Old-Data
数据库中创建了相同的索引,查询在UNION-ALL 视图上的性能是否良好?哪种类型的查询模式可能会使UNION-ALL 视图的执行计划失败?