当我们查询 SYS.DM_EXEC_CACHED_PLANS 时,会出现一个名为解析树的缓存对象类型,用于显示 View 和表值函数。它是否类似于存储过程和即席查询的查询计划?
最佳答案
没有。
这是该过程早期阶段的输出。它在编译阶段之前被替换为引用 View 的查询。涉及的阶段是
- 解析(输出:解析树)
- 绑定(bind)(输出:代数树)
- 查询优化(输出:执行计划)
- 查询执行
有关这些的完整描述,请参阅 Benjamin Nevarez 的文章 The SQL Server Query Optimizer
据我所知,尽管在 sys.dm_exec_cached_plans
中显示为解析树
,但它实际上是第二阶段的输出,被存储并替换为查询。此查询支持这一点,其中这些对象显示为 Bound Trees
SELECT text,
objtype,
refcounts,
usecounts,
size_in_bytes,
cacheobjtype,
name
FROM sys.dm_exec_cached_plans p
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
JOIN sys.dm_os_memory_cache_entries e
ON p.memory_object_address = e.memory_object_address
WHERE cacheobjtype = 'Parse Tree'
关于sql-server - sql server中的解析树缓存对象类型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9811287/