首页 新闻 会员 周边 捐助

oracle优化sql

0
悬赏园豆:30 [待解决问题]

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者的速度就差不多了,是为啥哦?

矜持先森么么哒的主页 矜持先森么么哒 | 初学一级 | 园豆:0
提问于:2019-06-12 09:26
< >
分享
所有回答(3)
0

是给第一个表的where加了is not null然后变的和第二个表一样慢了么。。。

小光 | 园豆:1766 (小虾三级) | 2019-06-12 11:55

不是,加了条件变快了,或者hint强制使用index也可以解决,但是为啥第二个使用全表扫描了不用index了,第二个的数据2000多万条一共

支持(0) 反对(0) 矜持先森么么哒 | 园豆:0 (初学一级) | 2019-06-12 17:48

@矜持先森么么哒: 第二个表field2是null的数据多么

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2019-06-13 09:52
0

group by 前尽量多的添加where条件(有索引最好不过),将查询结果集最小化,这样可以提升一些效率。PS:聚合分组能不用就不要用。

KingMi | 园豆:1344 (小虾三级) | 2019-06-12 15:34

都有索引的,而且重建了,第二个表的数据特别多,加了is not null或者使用hint都能解决,但是为啥第二标数据多了反而没有使用索引用的full_table_scan

支持(0) 反对(0) 矜持先森么么哒 | 园豆:0 (初学一级) | 2019-06-12 17:49
0

oracle版本CBO还不够智能,在session中修改了优化器模式,导致整体查询变慢

矜持先森么么哒 | 园豆:0 (初学一级) | 2019-07-16 08:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册