select count(field1) num
from table1
where field2 = :in_field
group by field1
union all
select count(field1) num
from table1_history
where field2 = :in_field
group by field1
有没有oracle优化大神帮忙看下,这2个表field,index都一样,下面那个是历史表,数据都很多,但是下面的表不走index,查询有第一个表的数据很快但是查询有第二个表数据的很慢。加了个条件:and field2 is not null以后2者的速度就差不多了,是为啥哦?
是给第一个表的where加了is not null然后变的和第二个表一样慢了么。。。
不是,加了条件变快了,或者hint强制使用index也可以解决,但是为啥第二个使用全表扫描了不用index了,第二个的数据2000多万条一共
@矜持先森么么哒: 第二个表field2是null的数据多么
group by 前尽量多的添加where条件(有索引最好不过),将查询结果集最小化,这样可以提升一些效率。PS:聚合分组能不用就不要用。
都有索引的,而且重建了,第二个表的数据特别多,加了is not null或者使用hint都能解决,但是为啥第二标数据多了反而没有使用索引用的full_table_scan
oracle版本CBO还不够智能,在session中修改了优化器模式,导致整体查询变慢