首页 文章

ORM(尤其是NHibernate)复杂查询的性能

提问于
浏览
10

我的公司正在从头开始重写现有的应用程序 . 除其他任务外,此应用程序还针对订单和发票数据执行复杂的SQL查询,以生成销售报告 . 查询是根据用户选择的条件动态构建的,因此如果选择了许多条件,它们可能会非常复杂 . 目前,表现不错,但不是很好 .

现在,对于新版本,我们想使用ORM,可能是NHibernate,因为它显然是唯一支持Oracle Lite的应用程序(该应用程序使用Oracle或Oracle Lite,具体取决于它是以连接模式还是以断开模式运行) . 但我担心NHibernate生成的查询的性能 . 之前我曾与其他ORM合作过(Linq to SQL,Entity Framework),但查询非常简单,因此没有性能问题 .

所以,在我决定使用ORM或保留纯SQL之前,我想知道这些工具处理外连接,子查询等场景的程度如何......你认为ORM(特别是NHibernate)是适合在上述报告场景中使用?我应该担心复杂查询的性能吗?

任何反馈将不胜感激

3 回答

  • 8

    this chart . 目前没有DataObjects.Net,但其与EF和NHibernate相比的结果显示为here .

    EF的LINQ测试代码是here;其他工具的版本可以在同一个文件夹中找到 . 所有这些.cs文件都是由a single T4 template生成的,因此测试完全相同 . 在那里使用的模型是Northwind .

    几个链接:

  • 5

    NHibernate有一点学习曲线,但是值得学习,因为花费的时间会多次付出代价 . 我会推荐NHibernate in Action一书来学习,因为它是一个很好的资源,涵盖了你的问题所要求的一切以及更多 .

    可以调整NHibernate性能(参见下面的链接),NHibernate具有强大的缓存机制 .

    http://www.codeproject.com/KB/database/NHibernate_Perf.aspx https://www.hibernate.org/hib_docs/nhibernate/html/performance.html

    最终,性能将由谁在SQL中编写查询来确定 .

  • 6

    如果您正在寻找具有全面高效的LINQ翻译器的ORM,我建议您尝试Entity FrameworkDataObjects.Net . 我'm not sure about Oracle Lite support. NHibernate'的LINQ翻译器尚未完全完成 .

    无论如何,你现在可以做的最好的事情是下载领先的ORM工具并使用分组,连接,子查询等对棘手的查询进行测试 .

相关问题