查询优化是一个复杂而且耗时的操作,所以SQL Server需要重用现有的查询计划。查询计划的缓存和重用在多数情况下是有益的的,但是在某些特殊的情况下,重编译一个查询计划可能能够改善性能。
SELECT usecounts, cacheobjtype, objtype, [text] FROM sys.dm_exec_cached_plans P CROSS APPLY sys.dm_exec_sql_text(plan_handle) WHERE cacheobjtype = 'Compiled Plan' AND [text] NOT LIKE '%dm_exec_cached_plans%';
清除查询计划缓存
当类似的查询计划太多,不便于我们查找,我们就可以清除掉查询计划。
DBCC FREEPROCCACHE
清除掉所有内存中的查询计划缓存。
DBCC FREESYSTEMCACHE
清除掉所有SQL Server内存中的查询计划缓存。
DBCC FLUSHPROCINDB (<dbid>)
清除掉指定数据库的所有查询计划缓存。
Note: 不要在Product环境中使用这些SQL语句,原因你懂的。