我一直在深入研究 SQL Server 查询存储,并且经常看到对“临时”查询的引用。但是,我还没有看到查询存储确定临时查询是什么。我见过可以推断为没有参数的查询或仅执行一次的查询的地方。是否存在对此的正式定义?我不是说一般。我的意思是它与查询存储有关。
例如,此页面显示了从查询存储中删除即席查询的示例,但它使用的条件似乎只有一个执行计数。这似乎是对 ad-hoc 查询的奇怪定义。顺便说一句,如果您转到该页面,请搜索“删除临时查询”。
我一直在深入研究 SQL Server 查询存储,并且经常看到对“临时”查询的引用。但是,我还没有看到查询存储确定临时查询是什么。我见过可以推断为没有参数的查询或仅执行一次的查询的地方。是否存在对此的正式定义?我不是说一般。我的意思是它与查询存储有关。
例如,此页面显示了从查询存储中删除即席查询的示例,但它使用的条件似乎只有一个执行计数。这似乎是对 ad-hoc 查询的奇怪定义。顺便说一句,如果您转到该页面,请搜索“删除临时查询”。
经过一番搜索,我无法从 Microsoft 的文档中找到具体且令人满意的来源来回答这个问题。那里有很多很好的第三方描述和定义,即 adhoc/ad-hoc/ad hoc,但对于这个问题的特殊性,我认为接近源代码的描述和定义是理想的。
超越像这个 SO 帖子这样的通用(但仍然准确)定义(感谢 SqlWorldWide),如果我们查看文档在该主题上所说的内容,它与您提到的基于执行次数的定义一致,我认为我们可以将其视为事实。
关于优化临时工作流程的文章说,
所以看起来 ad hoc 查询服务器配置选项也使用了单次执行的定义作为 ad hoc 的定义。如果查询继续执行并生成相同的计划,它将不再被视为这样。
关于查询存储的最佳实践的文章也与此一致,
当然,这适用于尚未用作存储过程、参数化等的查询,因为它们可以立即被识别和适当处理。
因此,基于所有这些,我们可以说在以下情况下将查询视为临时查询:
对于临时查询,DMV 中的object_id列
sys.query_store_query
将为 0,如sys.query_store_query 文档中所述:您可以根据该值识别即席查询,即使它没有明确说明为“这是即席查询的定义”。:)
术语 ad-hoc 用于指代仅执行一次的查询。这与用于数据库设置“针对临时工作负载优化”的定义一致。
您引用的有关删除临时查询的链接包括此特定定义“删除临时查询:这将删除仅执行一次且超过 24 小时的查询”。
来自learn.microsoft.com 中sys.dm_exec_cached_plans dmv 的
objtype
专栏的临时。此列的一个用途是查看具有多个计划的查询的情况,以查看多个计划是否由
Adhoc
.