实体类的对象 为 Person   Door  , 两者关系是 多对多的关系  数据库里这里有3张表
一张存放person 信息  一张存放 door信息 还有一张是 person 与 door关联的信息
原语句 是 //HQL 
from Person p where p.special<>'是' and p in (select elements(h.persons) from Door h where h.level='***')现在 数据库里 房屋和 人口 记录 多了 查询的时候 就很慢。。
如何 进行优化呢。。 希望在不改变 表结构 的情况下 只改写 语句

解决方案 »

  1.   

    不要用in 用子查询(exists)
      

  2.   

    from Person p where p.special<>'是' and p in (select elements(h.persons) from Door h where h.level='***')
    不等于号和in关键字都会引起全表扫描,这个应该是慢的原因。
    special有几种情况?如果不多,用union all连接,in改为join语句,应该就能解决。
      

  3.   

    select p.ID from (select elements(h.persons) from Door h where h.level='***') t
    left join Person p on p.xx=t.yy where p.special='否'
    union all
    select p.ID from (select elements(h.persons) from Door h where h.level='***') t
    left join Person p on p.xx=t.yy where p.special='无'可能不对,试试好了。