实体类的对象 为 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='***')现在 数据库里 房屋和 人口 记录 多了 查询的时候 就很慢。。
如何 进行优化呢。。 希望在不改变 表结构 的情况下 只改写 语句
一张存放person 信息 一张存放 door信息 还有一张是 person 与 door关联的信息
原语句 是 //HQL
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语句,应该就能解决。
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='无'可能不对,试试好了。