为什么我的 Sql 查询第二次运行时速度更快?

nav*_*eja 3 sql-server performance execution

每次我在执行 SQL 查询时都会得到相同的执行时间。如果 SQL 查询运行多次,是否有机会始终获得相同的执行时间?

sep*_*pic 5

当您第一次运行查询并且数据不在缓存中时,服务器将从磁盘读取数据。这很耗时。第二次执行相同的查询时,数据已经在缓存中,因此需要的时间更少。

如果 SQL 查询运行多次,是否有机会始终获得相同的执行时间?

如果您想使用冷缓存测试查询(每次都没有缓存数据),您可以在查询执行之前使用DBCC DROPCLEANBUFFERS :

使用 DBCC DROPCLEANBUFFERS 可以使用冷缓冲区缓存来测试查询,而无需关闭并重新启动服务器。要从缓冲池中删除干净的缓冲区并从列存储对象池中删除列存储对象,请首先使用 CHECKPOINT 生成冷缓冲区缓存。这会强制将当前数据库的所有脏页写入磁盘并清理缓冲区。执行此操作后,可以发出 DBCC DROPCLEANBUFFERS 命令以从缓冲池中删除所有缓冲区。

当然这不适用于生产环境。

相反,如果您希望数据始终位于缓存中,则应该增加服务器的 RAM,并且尽可能不要重新启动服务器。