有三个类(表)
User , Customer , CustomerCategory
其中User 和Customer 是一对多的关系,一个User 可以有很多Customer。 Customer 和 CustomerCategory 是多对多关系。
现在问题是这样的,前边传过来一个User 列表和一个 CustomerCategory 列表,获取符合条件的Customer 列表。
这个hql应该怎么写。 以下是我写的两个hql:select distinct(c) from Customer c join c.customerCategorys cc join c.user u where (cc.id = ? and u.id= ? ... 循环产生后部分另一个
select distinct(c) from Customer c where c.id in ( select c1.id from Customer c1 join c1.customerCategorys cc where cc.id in (:ccIds) and c.user.id in (:uIds) ;这两个都很慢大概20秒左右,生成的sql大约100kb左右的样子。有什么办法能让查询快一些,可以不用hibernate 或者用存储过程等,数据库oracle11g。
高手指点 谢谢。
User , Customer , CustomerCategory
其中User 和Customer 是一对多的关系,一个User 可以有很多Customer。 Customer 和 CustomerCategory 是多对多关系。
现在问题是这样的,前边传过来一个User 列表和一个 CustomerCategory 列表,获取符合条件的Customer 列表。
这个hql应该怎么写。 以下是我写的两个hql:select distinct(c) from Customer c join c.customerCategorys cc join c.user u where (cc.id = ? and u.id= ? ... 循环产生后部分另一个
select distinct(c) from Customer c where c.id in ( select c1.id from Customer c1 join c1.customerCategorys cc where cc.id in (:ccIds) and c.user.id in (:uIds) ;这两个都很慢大概20秒左右,生成的sql大约100kb左右的样子。有什么办法能让查询快一些,可以不用hibernate 或者用存储过程等,数据库oracle11g。
高手指点 谢谢。
本来如果你的表数据量大的话 3表联合查询肯定会很慢 只能加索引
底下那个SQL 性能差是因为 distinct in 子查询本身查询速度就慢
你可以用执行计划看哪里消耗了查询时间
采用c3p0或jndi操作或许能一定程度上帮你的忙!