我有一个大表(上千万个记录),出于性能原因,我们将其拆分为活动表和存档表,使用直接字段映射,并每晚运行一个存档过程。
在代码的几个地方,我们需要运行结合了活动表和归档表的查询,这些查询几乎总是被一个或多个字段过滤(我们显然已经在两个表中都添加了索引)。为了方便起见,有如下视图是有意义的:
create view vMyTable_Combined as
select * from MyTable_Active
union all
select * from MyTable_Archive
但是如果我运行类似的查询
select * from vMyTable_Combined where IndexedField = @val
在使用过滤之前,它将对Active和Store中的所有内容进行合并@val
,这会降低性能。
是否有任何巧妙的方法可以使并集的两个子查询@val
在创建并集之前查看每个过滤器?
或者,也许您会建议采用其他方法来实现我的目标,即一种简单有效的方法来获取由索引字段过滤的联合记录集?
编辑:这是执行计划(您将在这里看到实际的表名):
奇怪的是,活动表实际上使用了正确的索引(加上RID查找?),但是归档表正在执行表扫描!
评论不作进一步讨论;此对话已转移至聊天。
—
保罗·怀特9