kco*_*ntu 67 performance hibernate hql hibernate-criteria
我一直在读一些水壶,但我仍然感到困惑.为什么?因为你提到的差异与绩效无关.它们与易用性有关.(Objetc(标准)和SQL(hql)).但我想知道"条件"是否因某种原因比hql慢.
我在另一个回答中读到了这个
"HQL和criteriaQuery之间的性能存在差异,每次使用criteriaQuery触发查询时,它都会为表名创建一个新别名,这不会反映在任何数据库的最后一个查询缓存中.这会导致开销编译生成的SQL,花费更多时间来执行." 作者:Varun Mehta.
这非常接近但是!我在另一个网站上阅读(http://gary-rowe.com/agilestack/tag/hibernate/)Hibernate 3.3及以上版本不再是这种情况(请阅读:9)Hibernate很慢,因为SQL生成的Criteria接口不一致)
我已经做了一些测试试图找出差异,但两者都生成qry并且它不会更改表的别名.
我很困惑.如果有人知道主要原因,请帮助我们.谢谢
Jos*_*vis 145
我是2004年编写Hibernate 3查询翻译器的人,所以我知道它是如何工作的.
理论上,标准应该比HQL查询具有更少的开销(命名查询除外,我将得到).这是因为Criteria不需要解析任何东西.使用基于ANTLR的解析器解析HQL查询,然后将生成的AST转换为SQL.但是,使用HQL/JPAQL,您可以定义命名查询,其中在SessionFactory启动时生成SQL.理论上,命名查询的开销小于Criteria.
因此,就SQL生成开销而言,我们有:
也就是说,在我看来,选择基于解析和SQL生成开销的查询技术可能是一个错误.与使用真实数据在真实数据库服务器上执行实际查询相比,此开销通常非常小.如果在分析应用程序时实际显示此开销,那么您可能应该切换到命名查询.
在Criteria和HQL/JPAQL之间做出决定时,我会考虑以下事项:
小智 8
我正在研究数百万的记录.我发现HQL比Criteria快得多.标准在性能方面落后很多.
如果您正在处理大量数据,那么请转到HQL.
我最喜欢动态查询的条件查询。例如,动态添加一些订购或根据某些参数省去某些零件(例如限制)要容易得多。
另一方面,我将HQL用于静态和复杂查询,因为它更易于理解/阅读HQL。另外,我认为HQL功能更强大,例如对于不同的联接类型。
我认为针对HQL的标准的其他优势:
编写HQL使代码混乱。看起来不再像编写干净的面向对象代码了。
在编写Criteria Queries时,IDE会建议我们使用Intellisense,因此犯错误的机会较小,除非我们在双引号中写变量名之类的东西。
| 归档时间: |
|
| 查看次数: |
53543 次 |
| 最近记录: |