繁体   English   中英

在Entity Framework查询中使用变量或常量之间的任何性能差异?

[英]Any performance difference between using variables or constants in Entity Framework query?

我注意到如果我在EF查询中指定一个常量,该值被内联,但是如果我指定与变量相同的值,那么EF为它创建一个子查询并将其作为参数传递。 这两种方法之间是否有任何性能差异?

我有一些大量的Linq查询,我想知道在查询执行(和计划缓存)以及从Linq到SQL的转换方面,使用常量是否有助于提高性能。

我建议您查看TechNet上的这篇文章:

https://technet.microsoft.com/en-us/library/ms175580(v=sql.105).aspx

它声明如果您使用文字,那么查询优化器应该识别它,但有时它可能不会。

这些查询的执行计划之间的唯一区别是存储用于与ProductSubcategoryID列进行比较的值。 虽然目标是SQL Server始终认识到语句生成基本相同的计划并重用计划,但SQL Server有时不会在复杂的SQL语句中检测到这一点。

注意“复杂”和“有时”这两个词 - 相当具体的解释,不是吗? :)

本文还继续解释如果使用参数,它“帮助”引擎重用计划(再次具体),一些关于简单参数化和强制参数化的事情。

因此文档说它不确定,但通常这不应该有所作为。 或者我自己的经验:我发现引擎能够很好地识别EF生成的查询中的常量。 我不久前有同样的问题,并对Azure SQL进行了一些检查。 我不会说我检查了世界上最复杂的生成的SQL查询,但它们不仅仅是简单的select-where-let-join组合。

但同样,这是我在特定版本的引擎中的查询。 可以肯定的是,我建议你也检查你的问题,然后你可以肯定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM