在SQL Server的存储过程中,何时生成实际的SQL查询计划?当SQL第一次运行或编译存储过程时?知道查询计划的生成与Oracle相比有多昂贵吗?
答案 0 :(得分:4)
运行查询时,SQL Server将检查执行计划缓存中是否已存在该查询的执行计划。如果找到一个,它可以重用该执行计划。如果它没有在缓存中找到一个,则它会生成一个计划,放入缓存以备后续的重用调用,然后执行查询。所以它在执行查询时执行此操作。
计划在缓存中保留多长时间可归结为多种因素,包括:
- 该计划的使用频率
- 计划提供多少“价值”
- 服务器上的内存压力
因此,给定查询可能会在给定时间段内多次生成执行计划,如果计划不能保留在缓存中。此外,当SQL Server重新启动时,缓存将被清除。
上有一篇很好的MSDN文章