【问题标题】:Why is my Sql Query is Faster the Second Time it Runs?为什么我的 Sql 查询第二次运行更快?
【发布时间】:2018-10-29 06:45:23
【问题描述】:

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

【问题讨论】:

  • 也许您可以共享您的表结构、任何索引以及您正在执行的 SQL 语句?可能是索引问题,我可能是由于缓存,可能是查询编译器,但仅凭您提供的信息无法回答。请详细说明。
  • 我猜测缓存的查询计划,但这是一个猜测。添加更多细节,我们可以给出更具体的答案。
  • @Birel,SQL Server 不存储和重用计算结果。这里的函数没有意义。

标签: sql-server performance execution


【解决方案1】:

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

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

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

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

当然这不是在生产环境中使用的。

如果 相反,如果您希望您的数据始终在缓存中,您应该为您的服务器增加 RAM,并且不要尽可能长时间地重新启动它。

【讨论】:

    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2020-01-02
    • 2021-06-13
    • 2014-10-09
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多