我是SQL执行计划的新手,我正在尝试更多地了解它们。
我有几个问题。
发布于 2021-09-14 23:15:19
编译器生成查询计划后,就会将其存储在缓存中。当编译器确认它可以这样做时,查询计划就会被自动重用。
要做到这一点,查询必须是相同的临时批处理(直到最后一小部分空白),或者它是存储过程的一部分,此后一直没有更改。
用于计算计划的统计数据必须仍然有效且不变,所有使用的对象(表、索引、列、约束)也必须保持不变。
DBCC FREEPROCCACHE来逐出。这些计划可以从不同的系统视图和功能中查询,称为DMVs。例如,这个查询将为您提供SQL文本、XML执行计划以及大量其他数据。
SELECT *
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp如果你担心一个不稳定的计划,它总是在一个好的和坏的版本之间切换,你应该看看参数嗅探之类的东西,并试着了解什么会导致坏的计划浮出水面,以避免它。您可能需要更好的索引或统计信息,或者可能需要重新编制查询。
https://dba.stackexchange.com/questions/299596
复制相似问题