暂无图片
oracle 索引
我来答
分享
寨寨🍒
2021-11-03
oracle 索引

insert /*+parallel (m,32)*/ into  tbp_transaction_ia m  select /*+parallel(a,32)*/ * from tbp_transaction a where lase_upt_dt>=to_date('20210930 00:00:00','YYYYMMDD HH24:MI:SS') and last_upd_dt <=to_date('20210930 23:59:59','YYYYMMDD HH24:MI:SS') ;

上面语句查询执行计划,未走索引,显示的是全表扫描,tbp_transaction  是range--hash 组合分区,lase_upt_dt 是索引列,类型是datetime。

请教各位大师,该如何优化呢

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
薛晓刚

 select * from tbp_transaction a where lase_upt_dt>=to_date('20210930 00:00:00','YYYYMMDD HH24:MI:SS') and last_upd_dt <=to_date('20210930 23:59:59','YYYYMMDD HH24:MI:SS') ;

这样写用到了吗?

如果用到了改写成


insert into  tbp_transaction_ia m  select  * from tbp_transaction a where lase_upt_dt>=to_date('20210930 00:00:00','YYYYMMDD HH24:MI:SS') and last_upd_dt <=to_date('20210930 23:59:59','YYYYMMDD HH24:MI:SS') ;

暂无图片 评论
暂无图片 有用 0
寨寨🍒
题主
2021-11-03
老师您的意思是并行影响了索引是不 那到底是开并行快还是索引快呀
DarkAthena

全局索引和分区索引有区别,如果你的索引是全局索引,然后你又加了并行,CBO判断走分区扫描更合适,就不会用索引了,全局索引想要不走分区扫描,那你就把sql中的并行去掉。

对于分区表,并行和索引想一起用的话,索引应该建成分区索引。

而且不一定走索引就比全表扫描快,索引更多情况是找行而不是找块,主要是看要检索的数据量及集中性,如果你这个数据量比较大,应该要用这个时间栏位作为分区字段,这样就能快速定位分区进行复制

暂无图片 评论
暂无图片 有用 0
寨寨🍒
题主
2021-11-03
那如果不是分区表,加了并行,查询的时候索引会失效么?
寨寨🍒
题主
2021-11-03
谢谢老师 我刚验证了 加并行不影响TABLE类型表的索引。
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏