我尝试通过运行此SELECT
从查询计划缓存中获取参数化查询的查询计划:
SELECT qp.query_plan AS QueryPlan FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
where st.TEXT = '(@p00 NVarChar(4000),@p10 NVarChar(4000),@p20 NVarChar(4000),@p30 NVarChar(4000),@p40 NVarChar(4000),@p50 NVarChar(4000),@p60 NVarChar(4000),@p70 NVarChar(4000),@p80 NVarChar(4000),@p90 NVarChar(4000))(SELECT DISTINCT [MyTable].[PROFILEID] FROM [MyTable]...[ETC]'
我为上面的查询做了COUNT(*)
,它返回了5k个条目。
如果我在SQL Management Studio中运行一次查询,则返回结果大约需要5秒钟。 如果我并行运行多次(例如10次)它会变慢并且需要15-20秒才能完成。
任何想法为什么这个查询如此缓慢,我该如何改进它?