我对某些“类似”陈述的运行时间表现感到困惑。
select * from DLIFE.IS_TABLE_REPORT where [project_name] = 'myProject'
-- (82 row(s) affected) in 02:10
现在,如果我尝试在另一个查询中使用此查询返回的记录,则执行时需要4次或更长时间。 我能想到的最简单的例子就是:
select * into #temp
from DLIFE.IS_TABLE_REPORT where [project_name] = 'myProject'
-- (82 row(s) affected) in 08:10
因此出于某种原因,似乎需要花费6分钟将82行写入临时表! 这里发生的事情比我理解的要多。
查看执行计划&统计数据显示,两者之间存在很大差异。 我原以为它们几乎一样!
突然间,我意识到自己知之甚少。
统计:
选择
Table 'Key_Column_Definitions_Header'. Scan count 0, logical reads 202
Table 'Worktable'. Scan count 2,952,361, logical reads 24,753,476;
Table 'DLIFE_Med_Short'. Scan count 101, logical reads 41,496, read-ahead reads 1,
Table 'DLIFE_IS_FD_RUN_HISTORY'. Scan count 1, logical reads 88,
选择进入
Table 'Worktable'. Scan count 3825785, logical reads 29,257,307, physical reads 6,513;
Table 'DLIFE_Med_Short'. Scan count 82, logical reads 40660,
Table 'DLIFE_IS_FD_RUN_HISTORY'. Scan count 9, logical reads 182,
Table 'Key_Column_Definitions_Header'. Scan count 1, logical reads 4, read-ahead reads 3,
执行计划