我使用 SQL Server 2008,但如果需要,可以使用更高版本。
我有 2 个表格,其中包含关于某些人的非常相似的数据,但格式不同(这两组人之间没有交集)。
Table 1:
int personID
bit IsOldPerson //this field is indexed
Table 2:
int PersonID
int Age
我想要一个与表 1 结构相同的组合视图。所以我编写了以下脚本(简化版):
CREATE FUNCTION CombinedView(@date date)
RETURNS TABLE
AS
RETURN
select personID as PID, IsOldPerson as IOP
from Table1
union all
select personID as PID, dbo.CheckIfOld(Age,@date) as IOP
from Table2
GO
函数“CheckIfOld”根据@date 日期的输入年龄返回是/否。
所以我在这里有两个问题:
A. 如果我尝试select * from CombinedView(TODAY) where IOP=true
,SQL Server 是否会单独执行以下操作: 1) 对于表 1,使用字段 IsOldPerson 的索引并进行“聪明”的基于索引的结果选择;2) 为表 2 计算所有行的 CheckIfOld 并在计算期间逐行拾取或拒绝行?
B. 在这种特殊情况下,我如何检查执行计划以了解我对问题 (A) 的猜测是否正确?
任何帮助是极大的赞赏!谢谢!