Sql 存储过程在初始执行时变慢

Sql 存储过程在初始执行时变慢,sql,performance,stored-procedures,Sql,Performance,Stored Procedures,集团,, 我还在学习SQL,我遇到了一个新问题。我有两个存储过程,它们的初始执行/连接速度很慢。例如,我有一个存储过程(sp),我在应用程序中使用它来查找产品的价格。早上第一次运行sp时,可能需要20-40秒才能执行。之后只需要1-2秒。。。我们还对sp使用的表运行每日更新,更新后缓存将被清除,首次运行需要20-40秒,之后需要1-2秒 这有什么办法吗?我不确定是否应该在每日更新中添加一些内容,以便在更新后启动sp(这可能会导致混乱),或者是否可以向sp添加一些内容,告知其不清除缓存(这可能会导

集团,, 我还在学习SQL,我遇到了一个新问题。我有两个存储过程,它们的初始执行/连接速度很慢。例如,我有一个存储过程(sp),我在应用程序中使用它来查找产品的价格。早上第一次运行sp时,可能需要20-40秒才能执行。之后只需要1-2秒。。。我们还对sp使用的表运行每日更新,更新后缓存将被清除,首次运行需要20-40秒,之后需要1-2秒

这有什么办法吗?我不确定是否应该在每日更新中添加一些内容,以便在更新后启动sp(这可能会导致混乱),或者是否可以向sp添加一些内容,告知其不清除缓存(这可能会导致空间问题)。我不知道该怎么办,在第一次执行后一切都很好


非常感谢您的建议。

您看到速度差异的可能原因是缓存。一旦您运行了存储过程,执行计划就会进入缓存,速度会快得多。我们在我们的环境中所做的是,在上午7:30左右将使用较多的存储过程作为一项计划任务运行,以便在用户开始工作日时,在上午8点之前对其进行“预热”

  • 首先,任何存储过程第一次运行时都必须编译,这需要时间。然后(取决于供应商)缓存已编译的计划,以便后续执行不必重新编译它。甚至在以后,如果它在一段时间内没有执行,缓存中编译的计划可能已被覆盖,需要重新编译

  • 其次,(对于大多数供应商来说),当您运行任何查询时,都会读取执行查询所需的数据页。但是查询处理器从缓存中“读取”它们。只有当数据页不在缓存中时,处理器才会转到磁盘。因此,当它第一次需要数据时,通常会将数据存储到磁盘,但需要相同数据页的后续执行将从内存缓存中获取数据。由于磁盘I/O比RAM I/O慢几个数量级,这可能会导致查询执行时间的显著差异