暂无图片
ORACLE关联查询,where后,只能走一个索引。不走第二个索引
我来答
分享
伤城
2021-04-27
ORACLE关联查询,where后,只能走一个索引。不走第二个索引

SELECT C.PAYDATE
FROM REP_XUQI_PAYDETAIL B,REP_XUQI_NEW C
WHERE B.CONTNO = C.CONTNO
AND C.RISKCODE = B.RISKCODE
AND B.PAYCOUNT = C.PAYCOUNT

上边sql只走B表索引,不走C表索引是怎么回事:
Id Operation Name Rows Bytes Cost Time
0 SELECT STATEMENT 12062357 808177919 2281090 07:36:14

  • 1 . HASH JOIN 12062357 808177919 2281090 07:36:14
    2 … INDEX FAST FULL SCAN IDX_PAYDETAIL_3 12062357 349808353 18383 00:03:41
    3 … TABLE ACCESS FULL REP_XUQI_NEW 84970823 3228891274 2037113 06:47:26
我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
薛晓刚

你这仅仅是两个表做关联,不带任何过滤条件。都是全表扫描说着是索引快速扫描。就是走C也是c的索引全扫。你带个实际的条件看看。

暂无图片 评论
暂无图片 有用 1
打赏 0
刘晨

全表扫成本低于索引扫,而且c. paydate不在索引中,需要回表,单块读,效率更低。结合实际需求,可考虑增加限定条件,避免索引全扫,或者增加c.paydate到索引,避免进行回表。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏