使用Entity Framework查询数据时,SQL Server是否每次都会生成执行计划?

时间:2019-05-16 06:57:47

标签: sql-server entity-framework sql-execution-plan

我知道EF在应用程序级别上执行了一些执行计划的缓存,但是我想知道SQL Server是否在每个请求上生成执行计划。
我可以启用任何偏好来为任何查询(不仅是存储过程)制定SQL缓存执行计划。

1 个答案:

答案 0 :(得分:0)

SQL Server在内存中缓存它生成的每个计划(不仅针对过程)。这些计划在那里可能不会太久。基本上,这取决于服务器的繁忙程度,您有多少RAM,如何按SQL Server的内存等等。您也可以启用查询存储,但这是SQL Server 2016中引入的新功能。有几个选项,但是它可以为您保存特定查询的计划和执行历史等。您可以使用此查询查看缓存中的实际内容:

SELECT 
     c.usecounts
    ,c.size_in_bytes
    ,c.objtype
    ,query.text
    ,plans.query_plan
FROM sys.dm_exec_cached_plans AS c
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS query
CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS plans
ORDER BY c.usecounts DESC