gpt4 book ai didi

performance - NHibernate HQL vs CriteriaAPI vs QueryOver vs Linq。表现

转载 作者:行者123 更新时间:2023-12-03 20:19:29 24 4
gpt4 key购买 nike

什么是性能 hql 和criteriaApi 和QueryOver 之间的区别?是否存在一种比另一种更快或更慢的情况?

编辑:我用 QueryOver 和 Linq 扩展了这个问题。

==============================================

好吧,我不确定要将哪个回复标记为答案,所以我会标记大多数 VoteUp 的帖子。我不知道。这实际上更多是讨论而不是问题。

最佳答案

由于一个简单的原因,ICriteria 和 HQL 之间的性能特征差异很小(我不知道 QueryOver)。

默认情况下,ICriteria 查询将尝试实现映射中定义的获取策略,而 HQL 默认情况下将所有内容视为 Lazy 并依赖于查询中的连接声明来定义急切获取或不获取的内容。

此外,ICriteria 依赖于参数传递的映射,而 HQL 允许显式参数类型,例如IQuery.SetInt32("fooParam", 5);

真正重要的是 ICriteria 查询的可插入性(请参阅 ICriteria.CreateCriteria().CreateCriteria() 等),其中 NH 引擎必须解析 ICriteria 并尝试生成最有效的 SQL。

另一方面,它可能更容易预测 HQL 查询是否会产生一致的结果,从而使 QueryCache 的使用更容易。

无论哪种方式,配置都是使用 ISessionFactory 创建和映射定义生成一次,而其他内容都在内存中,因此性能很好。

实际 SQL 生成在两者之间有所不同,这就是 ICriteria -> HQL 实用程序不存在的原因。

最后,我的经验告诉我,两者之间的性能可能是相同的,需要几毫秒。

作为旁注,在映射中尽可能多地声明将导致更简洁的 sql 生成以及 NHibernate 操作,例如对于映射 Length 的字符串属性。在 .hbm.xml 中将导致 NHibernate 在进入数据库之前检查字符串长度。

关于performance - NHibernate HQL vs CriteriaAPI vs QueryOver vs Linq。表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3262642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com