啥也不说了,贴上sql:
create or replace view my_project_view as
select *
from 表A t where status='XXX' and pro_status='x' and ( flag <>'x' or flag is null ) and
( LEAD_ID = fruit_view_param.get_paramthree() or t.auto_id in
(select PROJECT_ID from 表B where LEAD_ID=fruit_view_param.get_paramthree()
or AUTO_ID in ( select PROJECTIMPL_ID from 表C where LEAD_ID=fruit_view_param.get_paramthree())
) );
问题:对于where xxx in 子句效率极其低下问题,求大神指教 。
我这个语句该如何去改写。
这个问题还是我自己来解决吧,在SQL没有变化的情况下,我建立了两个索引。PROJECT_ID 和 PROJECTIMPL_ID 程序执行时间为206ms,以前需要3306ms!
补充:exists 我也用过,效率反倒比in更低下! 请问做多表查询语句,定向查询,我应该以什么思路去写这个查询条件!
AUTO_ID 和 PROJECTIMPL_ID 加上索引看看
LEAD_ID = fruit_view_param.get_paramthree () 单测下这个函数的查询时间
数据量大的表一定要加上索引
可以将in里的子技术查询改成与a表join