什么是sql server中的Parse Tree缓存对象类型

ram*_*amg 5 memory sql-server caching

当我们查询SYS.DM_EXEC_CACHED_PLANS时,会出现一个名为parse tree的缓存对象类型,显示视图和表值函数.它是否类似于存储过程和即席查询的查询计划?

Mar*_*ith 9

没有.

这是该过程早期阶段的输出.它将被替换为在编译阶段之前引用Views的查询.涉及的阶段是

  • 解析(输出:解析树)
  • 绑定(输出:Algebrized Tree)
  • 查询优化(输出:执行计划)
  • 查询执行

有关这些的完整描述,请参阅Benjamin Nevarez的文章The SQL Server Query Optimizer

尽管AFAIK出现Parse Treesys.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' 
Run Code Online (Sandbox Code Playgroud)