当我第一次执行存储过程时,它(例如)需要3分钟才能执行。 一旦预编译,执行需要1分钟。
3个月后(不再使用SP),当我再次尝试执行时,需要3分钟。
我的问题
执行路径是否存储在堆栈中?或者是由于其他一些因素?如果我理解错误,请纠正我。
答案 0 :(得分:3)
执行计划存储在缓存中,正如其他人指出的那样,甚至表数据都存储在缓存中,并且会尽可能长时间地保留在缓存中。在您的情况下,编译时间不是问题。
可能是:
尝试使用以下代码执行存储过程之前
SET STATISTICS IO ON
并查看您的过程是否使用物理读取或逻辑读取。如果它是逻辑的,它使用缓存来获取数据
答案 1 :(得分:2)
出于多种原因,可以从缓存中删除它。通常:
性能差异通常也是表加载时间(索引,统计信息,数据等)
它不是用c#或c ++意义编译的
答案 2 :(得分:1)
根据http://technet.microsoft.com/en-us/library/ms181055%28SQL.90%29.aspx
似乎该计划最初会被缓存,但在其他计划被缓存后会在一段时间后被删除。
答案 3 :(得分:1)
时差当然不是因为创建执行计划所花费的时间。在最糟糕的情况下,如果必须从磁盘加载所有统计信息,可能需要一秒左右的时间......
时间差异很可能是因为表和索引必须首次从磁盘加载,并缓存以用于后续执行。