【发布时间】:2011-02-23 07:48:21
【问题描述】:
在 SQL Server 的存储过程中,何时生成实际的 SQL 查询计划?第一次运行 SQL 时或编译存储过程时?知道与 Oracle 相比,查询计划的生成成本有多高吗?
【问题讨论】:
标签: sql-server sql-execution-plan
在 SQL Server 的存储过程中,何时生成实际的 SQL 查询计划?第一次运行 SQL 时或编译存储过程时?知道与 Oracle 相比,查询计划的生成成本有多高吗?
【问题讨论】:
标签: sql-server sql-execution-plan
运行查询时,SQL Server 将检查执行计划缓存中是否已存在该查询的执行计划。如果找到,它可以重用该执行计划。如果在缓存中没有找到,它会生成一个计划,将缓存放入缓存中以供后续调用以重用,然后执行查询。因此它在执行查询时执行此操作。
计划在缓存中保留多长时间取决于多种因素,包括:
- 该计划的使用频率
- 该计划提供多少“价值”
- 服务器内存压力
因此,一个给定的查询可能会在给定的时间段内多次生成一个执行计划,如果它的计划没有设法留在缓存中。此外,当 SQL Server 重新启动时,缓存会被清除。
Execution Plan Caching and Reuse 上有一篇很好的 MSDN 文章
【讨论】: