hql与criteriaApi和QueryOver之间的性能差异是什么?有没有一种情况比另一种更快或更慢?

编辑:我扩展了与QueryOver和Linq的问题。

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

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

最佳答案

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

默认情况下,ICriteria查询将尝试实现您在映射中定义的获取策略,而HQL默认情况下会考虑所有惰性的内容,并取决于查询中的联接声明来定义是否急切地获取内容。

另外,ICriteria依赖于参数传递的映射,而HQL允许使用明确的参数类型,例如IQuery.SetInt32(“ fooParam”,5);

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

相反,它可能更容易预测HQL查询是否会产生一致的结果,因此使QueryCache的使用更加容易。

无论哪种方式,配置都使用ISessionFactory创建和映射定义以及内存中什么都不会生成一次,因此性能很好。

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

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

附带说明一下,在映射中声明尽可能多的代码将导致更简洁的sql生成以及NHibernate操作,例如,对于字符串属性映射.hbm.xml中的Length,将导致NHibernate在检查字符串长度之前去数据库。

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

10-17 01:19