首页新闻找找看学习计划

oracle关联查询问题

0
悬赏园豆:50 [待解决问题]
select a.ORDERSOURCE,a.SHOPCODE,count(distinct a.ORDERCODE),sum(b.AMT)
  from ORDER a
    join ORDERPAYMENT b on a.ORDERCODE = b.ORDERCODE
  where a.CREATEDATE >= date'2019-03-10' and
        a.CREATEDATE <= date'2019-04-13'+18/24 and (a.ORDERSOURCE=26 or a.ORDERSOURCE=4) and a.CHANGETYPE=0 and a.ORDERSTATUS =3 and a.PAYCONCODE = '1'
 and b.BILLTYPE=1  and b.PAYTYPECODE = 'alipay'
 group by a.ORDERSOURCE,a.SHOPCODE

两张表数量都在千万级,ORDER表中ORDERCODE 是主键,CREATEDATE 有索引,ORDERPAYMENT表 中ORDERCODE 有索引
查询计划:

为什么ORDERPAYMENT表一直被全表扫描?

问题补充:

缩小时间范围的情况:

balahoho的主页 balahoho | 老鸟四级 | 园豆:2048
提问于:2019-10-09 17:18
< >
分享
所有回答(2)
0

junk box: CREATEDATE IDX

A.Z | 园豆:224 (菜鸟二级) | 2019-10-10 22:51

没太明白,CREATEDATE已经有索引的

支持(0) 反对(0) balahoho | 园豆:2048 (老鸟四级) | 2019-10-11 17:31
0

你这个执行计划里显示用到CREATEDATE的索引了吧,索引全表扫那行显示的就是使用索引的名称,这段sql的主要耗时在连接和group by上面;
索引是在查询部分数据时可以加快速度,如果要全表查询的话索引是没有加快效率的,如果b表的条件比较常用的话可以在那些字段上加索引,你不加索引的话 B表肯定是全表扫

但愿长醉丶不愿醒 | 园豆:212 (菜鸟二级) | 2019-11-12 18:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册