为什么我的 Sql 查询在第二次运行时速度更快?
Why is my Sql Query is Faster the Second Time it Runs?
每次我在执行 SQL 查询时获得相同的执行时间。
如果 SQL 查询运行多次,是否有机会始终获得相同的执行时间?
当您 运行 第一次查询并且数据不在缓存中时,服务器从磁盘读取数据。这很耗时。第二次执行相同的查询时,数据已在缓存中,因此需要的时间更少。
is there any chance to get same execution time for all the time if SQL
query runs multiple times ?
如果您想使用冷缓存测试您的查询(每次都没有缓存数据),您可以在查询执行之前使用 DBCC DROPCLEANBUFFERS:
Use DBCC DROPCLEANBUFFERS to test queries with a cold buffer cache
without shutting down and restarting the server. To drop clean buffers
from the buffer pool and columnstore objects from the columnstore
object pool, first use CHECKPOINT to produce a cold buffer cache. This
forces all dirty pages for the current database to be written to disk
and cleans the buffers. After you do this, you can issue DBCC
DROPCLEANBUFFERS command to remove all buffers from the buffer pool.
当然这不是要在生产环境中使用的
如果
相反,如果您想始终将数据保存在缓存中,则应增加服务器的 RAM,并且尽可能不要重新启动它。
每次我在执行 SQL 查询时获得相同的执行时间。 如果 SQL 查询运行多次,是否有机会始终获得相同的执行时间?
当您 运行 第一次查询并且数据不在缓存中时,服务器从磁盘读取数据。这很耗时。第二次执行相同的查询时,数据已在缓存中,因此需要的时间更少。
is there any chance to get same execution time for all the time if SQL query runs multiple times ?
如果您想使用冷缓存测试您的查询(每次都没有缓存数据),您可以在查询执行之前使用 DBCC DROPCLEANBUFFERS:
Use DBCC DROPCLEANBUFFERS to test queries with a cold buffer cache without shutting down and restarting the server. To drop clean buffers from the buffer pool and columnstore objects from the columnstore object pool, first use CHECKPOINT to produce a cold buffer cache. This forces all dirty pages for the current database to be written to disk and cleans the buffers. After you do this, you can issue DBCC DROPCLEANBUFFERS command to remove all buffers from the buffer pool.
当然这不是要在生产环境中使用的
如果 相反,如果您想始终将数据保存在缓存中,则应增加服务器的 RAM,并且尽可能不要重新启动它。