ORM与参数化查询,如果我唯一关心的是数据访问的速度

时间:2010-01-11 21:15:08

标签: asp.net performance data-access

我在ASP.net / SQL Server开发环境中工作。如果我唯一关心的是速度,我应该使用参数化查询还是应该使用ORM,如nHibernate或LINQ?

5 个答案:

答案 0 :(得分:3)

大多数ORM支持参数化查询,因此在这方面没有区别。我会尽可能地使用ORM来实现,并且只在需要时通过手工编写SQL进行优化。

了解ORM的工作原理应该可以帮助您构建性能良好的代码。这样你可以避免明显的陷阱,例如在循环中重复调用查询,例如,当通过外键查询另一个表时。

答案 1 :(得分:3)

在所有条件相同的情况下,ORM增加了开销,因此它们开始处于不利地位。

另一方面,ORM可能会生成比您更高效的SQL,其中许多都带有内置缓存功能,您不必自己编写(如果它们适合您的目的,您可以从中获得改进)缓存可能比你输入的额外开销大。)

答案 2 :(得分:1)

对此的答案实际上是“它取决于”,并且需要您在自己的环境中进行测试以确认,但总的来说我会说使用ORM工具会增加额外的抽象层,这可能会让您失望一些开销。我想如果你在编写SQL时非常糟糕,ORM可能会更好,但在这种情况下,我只是努力提高你的SQL技能。

编辑:我想补充一点,我通常不会根据性能决定ORM与没有ORM。我会根据其他因素做出选择,并在此背景下优化我的设计。

答案 3 :(得分:1)

如果唯一关注的是没有使用缓存的查询速度,那么您不需要ORM,因为它的主要功能是通过删除执行本机查询的需要来简单编码。但有时您需要使用ORM的本机查询来获得最佳速度,即使如此,抽象可能需要比使用参数化查询手动更长的时间。

但是,如果您的查询可能会受益于缓存对象,则ORM可能会提高您的速度。

答案 4 :(得分:1)

开销来自映射,跟踪更改等......而不是查询本身。映射速度非常快,但如果您在一个操作中处理100,000条记录,则直接sql将获胜。但是,如果您在操作中处理100,000条记录,则不应使用ORM。