当*IN*子句中的参数计数发生变化时,数据库执行计划是否可以重用?
Can database execution plan be reused when parameter count in *IN* clause changes?
如果在 IN 子句中使用 10 个参数执行查询,然后使用 20 个参数再次执行相同的查询,数据库服务器是否可以重用第一个 运行 的执行计划,或者是每次都必须创建新的执行计划?
我刚刚快速检查了 SQL 服务器,当我从 IN
子句中 added/removed 值时,看起来每个查询确实收到了自己的查询计划。
此代码将显示当前缓存的查询计划。您可以调整对 text
的检查以将其缩小到您自己的特定查询,然后在您执行其他版本的查询时查看是否显示新行。
SELECT TOP 10
text,
*
FROM
sys.dm_exec_cached_plans AS CP
CROSS APPLY sys.dm_exec_sql_text(CP.plan_handle) ST
WHERE
text LIKE 'select * from dbo.My_Table where%'
如果在 IN 子句中使用 10 个参数执行查询,然后使用 20 个参数再次执行相同的查询,数据库服务器是否可以重用第一个 运行 的执行计划,或者是每次都必须创建新的执行计划?
我刚刚快速检查了 SQL 服务器,当我从 IN
子句中 added/removed 值时,看起来每个查询确实收到了自己的查询计划。
此代码将显示当前缓存的查询计划。您可以调整对 text
的检查以将其缩小到您自己的特定查询,然后在您执行其他版本的查询时查看是否显示新行。
SELECT TOP 10
text,
*
FROM
sys.dm_exec_cached_plans AS CP
CROSS APPLY sys.dm_exec_sql_text(CP.plan_handle) ST
WHERE
text LIKE 'select * from dbo.My_Table where%'