ber*_*ami 9 performance hibernate
我最近有一个相当奇怪的现象.必须获得包含具有不同WHERE条件的多个表的连接的计数.我首先使用hibernate的标准API实现了查询.它正确地创建了所请求的准备好的SQL语句,但速度相当慢.使用HQL重新实现整个查询.这样做是相当讨厌的,但结果的执行速度比使用Criteria API快得多.有人知道这种行为的原因吗?我假设Criteria和HQL框架使用相同的代码库将其转换为SQL.
这是查询:
select count(*) from R r where r.ISREPLACEDBY = 0
and r.STATUS='OK' and r.A = ?
and r.C in
(select distinct RC from CX cx where cx.FROMDATE >= ? and cx.FROMDATE <=?)
Run Code Online (Sandbox Code Playgroud)
ber*_*ami 17
我想我终于找到了原因.似乎每次执行预准备语句时,条件api都会创建新的变量名.每次执行语句时,数据库(在我们的示例中为DB2)都会计算新的查询执行计划.另一方面,HQL使用相同的变量名,允许数据库重用查询执行计划.
| 归档时间: |
|
| 查看次数: |
8273 次 |
| 最近记录: |