26

只是一个普遍的问题:

执行特定查询时,是否可以将查询/命令传递给 SQL Server 以不使用缓存?

我正在寻找可以设置的查询/命令,而不是配置设置。有没有必要这样做?

4

4 回答 4

26
DBCC FREEPROCCACHE

将删除所有缓存的过程执行计划。这将导致重新编译所有后续过程调用。

添加WITH RECOMPILE到过程定义中会导致过程在每次调用时都被重新编译。

我不相信(在 SQL 2005 或更早版本中)有任何方法可以清除单个过程执行计划的过程缓存,我怀疑你是否可以在 2008 年做到这一点。

于 2009-12-06T23:33:50.743 回答
24

如果要强制查询不使用数据缓存,最好的方法是在运行查询之前清除缓存:

CHECKPOINT
DBCC DROPCLEANBUFFERS

请注意,强制重新编译不会影响查询对数据缓存的使用。

您不能只标记单个查询以避免缓存的原因之一是缓存使用是执行查询的一个组成部分。如果数据已经在缓存中,那么如果第二次读取数据,SQL Server 会如何处理该数据?更不用说同步问题等。

于 2009-12-07T07:52:02.677 回答
2

另一种不使用 MS-SQL Server 缓存的本地化方法是在语句末尾OPTION(RECOMPILE)使用关键字。

例如

SELECT Columnname
FROM TableName
OPTION(RECOMPILE)

有关此和其他类似查询缓存线索以帮助识别查询问题的更多信息,Pinal Dave(无从属关系)有一些关于此的有用信息。

于 2021-02-11T03:10:29.630 回答
1

采用

WITH RECOMPILE
于 2009-12-06T23:19:52.107 回答