有三个类(表) 
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。
高手指点 谢谢。

解决方案 »

  1.   

    sql优化方面的工作,没弄过,到网上多搜搜吧,希望你自己可以解决!
      

  2.   

     Customer 和 CustomerCategory 为什么要用多对多的关系?最好采用中间表的形式。  
      

  3.   

    表间的关系 可以在java代码中实现 这样大大减少了 访问数据库的次数
      

  4.   

    你去看下SQL优化的规则吧
    本来如果你的表数据量大的话 3表联合查询肯定会很慢 只能加索引
    底下那个SQL 性能差是因为 distinct in 子查询本身查询速度就慢 
    你可以用执行计划看哪里消耗了查询时间
      

  5.   

    Hibernate本身性能就不行,更何况级联操作?
    采用c3p0或jndi操作或许能一定程度上帮你的忙!