我在 ASP.net/SQL Server 开发环境中工作。如果我唯一关心的是速度,我应该使用参数化查询还是应该使用诸如 nHibernate 或 LINQ 之类的 ORM?
5 回答
大多数 ORM 支持参数化查询,因此在这方面没有区别。我会尽可能地使用 ORM 来实现,并且只在需要时通过手工制作 SQL 进行优化。
了解 ORM 的工作原理应该可以帮助您构建性能良好的代码。这样,您可以避免明显的陷阱,例如在循环中重复调用查询,例如,通过外键查询另一个表时。
在所有条件相同的情况下,ORM 会增加开销,因此它们一开始处于劣势。
另一方面,ORM 可能会生成比您更高效的 SQL,其中许多都带有您不必自己编写的内置缓存功能(如果它们适合您的目的,您从缓存中获得的改进可能大于您因额外开销而损失的东西)。
对此的答案实际上是“视情况而定”,并且需要您在自己的环境中对其进行测试以确认,但总的来说,我会说使用 ORM 工具会增加一个额外的抽象层,这可能会花费您一些开销。我想如果你真的不擅长编写 SQL,ORM 可能会更好,但在这种情况下,我只会努力提高你的 SQL 技能。
编辑:我只想补充一点,我通常不会根据性能在 ORM 与无 ORM 之间做出决定。我会根据其他因素做出选择,并在这种情况下优化我的设计。
如果您唯一关心的是不使用缓存的查询速度,那么您不需要 ORM,因为它的主要功能是通过消除执行本机查询的需要来简单地编码。但有时您需要使用带有 ORM 的原生查询来获得最佳速度,即使如此,抽象可能需要比手动使用参数化查询稍长的时间。
但是,如果您的查询可能会从缓存对象中受益,那么 ORM 可能会提高您的速度。
开销来自进行映射、跟踪更改等......,而不是查询本身。映射非常快,但是如果您在一次操作中处理 100,000 条记录,则直接 sql 会胜出。但是,如果您在操作中处理 100,000 条记录,则不应使用 ORM。