从我对查询计划如何通过查询进行编译,存储和检索的有限知识中,我了解到多语句查询或存储过程将生成其查询计划,该查询计划将存储在查询计划缓存中,以供查询在将来的执行中使用。
我认为此计划是使用查询哈希从查询计划缓存中检索的,这意味着如果编辑并执行查询,哈希将有所不同,并且会生成新计划,因为在查询计划缓存中找不到匹配的哈希。
我的问题是:如果用户执行多语句查询中的语句之一的语句,是否可以将缓存中已存在的查询计划的相关部分用于多语句查询?我希望答案是否定的,因为哈希值显然不匹配,但是对多语句查询中的每个语句进行哈希处理会更好些,以便用户在查询中运行单个语句可以使用它们吗?
我希望有一些我没有考虑到的复杂因素(而这正是我真正想知道的),但似乎我们可以在许多查询计划中存储相同的“语句计划”,从而占用更多空间并占用更多时间CPU和生成时间。
可能只是显示我的无知。
dbid
并且objectid
都有is_cache_key=1
,所以你不会得到不同的编译对象之间的任何计划重用。