我的应用程序对 SQL Server 数据库运行查询。
在许多情况下,我可以看到执行计划的好处:例如,我第一次单击按钮
SELECT * from Tasks
WHERE IdUser = 24 AND
DATE < '12/12/2010' and DATE > '01/01/2010'
第一次需要 15 秒,接下来的时间需要 8 秒。
编辑:我使用参数化查询。
所以我第二次就进步了7秒。
现在,当我再次运行该应用程序时(因此我进行了一个新的数据库连接),第一次需要 15 秒,第二次需要 7 秒...
如何告诉 SQL Server 存储执行计划,至少在同一天记住它们?或者但是我如何才能从已经计算出的执行计划中受益?如果不同的用户运行相同的查询,这是一种告诉 sql server 足够聪明以使用相同执行计划的方法,即使在这种情况下 IdUser 可能会不同。
在软件中我有一些参数,所以下次执行查询时可能会有不同的MinDate和MaxDate,但这会影响查询计划吗?
使用参数化查询来最大限度地提高计划被缓存的机会
SELECT * from MYTasks
WHERE IdUser = @UserId AND DATE < @enddate and DATE > @startdate
SQL Server 确实会进行自动参数化,但对此可能相当保守。
您可以从以下内容中深入了解计划重用
SELECT usecounts, cacheobjtype, objtype, text, query_plan, value as set_options
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
cross APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
where text like '%MYTasks%' and attribute='set_options'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)