Dan*_*gel 10 java sql orm hibernate jdbc
我正在尝试检测和优化Java/Hibernate应用程序中的低效连接.我注意到在某些情况下,由于结果集中如何处理联接的性质,线上数据流的效率非常低.
让我举个例子.假设您有一个如下所示的HQL查询:
select s from Store s
left join fetch s.items i
left join fetch s.employees e
left join fetch s.customers c
where s.id = :id
Run Code Online (Sandbox Code Playgroud)
(暂时忽略这不是一个聪明的查询 - 这只是一个简化的例子).
如果您想象某个商店有1000个商品,10个员工和100个客户,您将获得一个包含1111个实体的Java对象树.这可能会让你误以为从数据库中返回了大约1111行,而实际上结果集有1,000,000行!
所有列的存在使这更糟.如果你想象每个表有5列,你可能会想到你有大约5555个"项目",而结果集中的单元格数(行*列)实际上是20,000,000.
显然,应用程序开发人员有责任了解此问题,而不是以这种方式编写查询.然而,这有时会无意地(并且以不太严格的方式)发生,并且能够检测应用程序以某种方式识别这些情况将是很好的.
但是,我一直无法找到任何方法来计算(在Java/Hibernate应用程序中)原始结果集中的行数或列数.Hibernate拦截器,Hibernate事件和Hibernate统计数据似乎都无法访问这些信息.
有什么建议?提前致谢.
| 归档时间: |
|
| 查看次数: |
1435 次 |
| 最近记录: |