连接查询的Hibernate性能问题

时间:2012-01-28 04:53:54

标签: performance hibernate join

我们正在使用动态HQL查询生成器,它生成如下查询的查询:

select sum(en1.amount) from SampleEntity1 as en1 where en1.child.name = ?    

Hibernate将上面的查询转换为sql,如下所示:

select sum(tbl1.c_amount)  from sampletable1 as tbl1, samplechild as child1 where tbl1.c_child = child1.c_id and child1.c_name = ?

表sampletable1和samplechild都有超过100万条记录,并且由于生成的sql具有交叉连接,因此查询的性能非常低,并且它遭受了大量的数据库I / O. 但是如果我们使用内部联接运行sql,查询将以更好的性能运行。

有没有办法强制hibernate将这样的HQL查询转换为内连接而不是交叉连接?

1 个答案:

答案 0 :(得分:0)

这是一个内连接,但它不使用内连接语法。如果您希望它具有内部联接语法,请使用内部联接,如Hibernate reference manual

中所述
select sum(en1.amount) from SampleEntity1 as en1 
inner join en1.child child
where child.name = ?   

我很惊讶两个查询都不会在同一时间执行。它们是等价的,应该使用相同的索引。