子查询执行计划

子查询的执行计划:
explain SELECT
*
FROM
PLC_CAR plccareo0_
WHERE
(
plccareo0_.topId IN (
SELECT
plcmaineo1_.topId
FROM
PLC_MAIN plcmaineo1_
WHERE
1 = 1
AND plcmaineo1_.lstVerFlag = ‘1’
AND plcmaineo1_.lstEffVerFlag = ‘1’
AND (
plcmaineo1_.businessType IN ( ‘66’, ‘68’ ))
AND plcmaineo1_.coinsLinkCode <> ‘4’
AND (
plcmaineo1_.productCode IN ( ‘0507’ ))
AND topid <> ‘20482241691808’
))
AND plccareo0_.licensePlateNo = ‘续A8B30C’
AND plccareo0_.licenseType = ‘02’
ORDER BY
plccareo0_.startTime DESC;


plccareo0_ 表走了licenseplateno的索引,里面的子查询查询出来的数据为0,为什么plccareo0_这张表不走topId的索引,这样执行返回0条数据,但是plccareo0_表却走了licenseplateno的索引,符合 plccareo0_.licensePlateNo = ‘续A8B30C’ 的数据量1003,当加了hint 强制plccareo0_走topId 的索引的时候,执行计划显示的是索引全表扫

看下数据类型是否一致?

两张表的topid 数据类型一直都是decimal

EXPLAIN ANALYZE看下执行计划

这是因为 目前 IndexJoin 只支持 inner side 是一个 DataSource,不支持 inner side 是 Agg->DataSource,而 plccareo0_ 是 Agg->DataSource 的形式。
参考我的这个问题:指定INL_JOIN,但执行计划并不走 - #13,来自 xuyifangreeneyes

目前 IndexJoin 只支持 inner side 是一个 DataSource,不支持 inner side 是 Agg->DataSource,而 plccareo0_ 是 Agg->DataSource 的形式 大佬,我想问下这个形式是在哪里看的,执行计划里面没有找到

看错了,请忽略我上面的回答。