执行计划

执行计划部分不是很理解,b表有索引为什么没有用到索引,m表394条数据,b 表7397条数据


sql文本:EXPLAIN ANALYZE SELECT
m.,
b.

FROM
PLC_RISKMAINCONFIG m,
PLC_RISKDETAILCOFIG b
WHERE
1 = 1
AND m.id = b.parentId
AND m.coeffCategoryTwoCode = ‘1’
AND m.viewFlag = ‘0’
AND b.intervalBig < ‘1’ AND b.intervalSmall > ‘1’
AND productcode = ‘27010001’

B表索引是什么?

B表的条件都没有在索引里吧

AND b.intervalBig < ‘1’ AND b.intervalSmall > ‘1’

1 个赞

我看是b,m表关联,为什么不能用关联条件m.id = b.parentId,

可以参考一下这里进行理解

https://docs.pingcap.com/zh/tidb/stable/explain-joins#用-explain-查看-join-查询的执行计划

2个字段的类型一致吗


不一样 一个是decimal 一个是varchar ,这种情况就走不了索引了吧?

会有隐式转换,导致用不了索引

1 个赞

那比如这种的怎么转换成一样的?

b.interbig作为 b表的访问方式 ,所以 ,不使用索引。 关联列是条件后回表 和类型进行转换了。 不可能使用索引的吧 。

会把 ‘1’ 转换成 1 去掉 单引号 就会识别成数字, 加上单引号 就是字符 。对于你来说都是 1 。 但是机器类型不一样