大表和小表关联查询无法返回数据 小表改为具体值in条件后查询很快返回,请问该如何优化?

企业版OB 3.1.2版本,OB MySQL租户;大表和小表关联查询无法返回数据,小表100条数据,大表几亿条,将关联查询的小表改为join列 in (小表结果集)后,查询很快返回。

– join列/where条件列上是有索引的,选择性预计不会太差

对比改造为in 常量后的执行计划,以及较慢的执行计划见附件,请帮忙指导下这慢的原因是什么、以及该如何优化。

ddzx_log_TABLE_ws_log.txt (1.5 KB)
excel_data.txt (878 字节)
快的计划1.txt (45.6 KB)
慢的计划1.txt (3.7 KB)

慢是没走NLJ 对 a 全表扫描了。
ws_log_busi_id 这个索引是不是建成前缀索引了?
改成(busi_id)再试试

为啥前缀索引不起作用呢?

explain extended 一下看看

explain extended 查看执行计划和odc查看的执行计划输出结果是不是一样的,上传的附件里有。

试试这种:/*+ use_nl(b a) index(a ws_log_busi_id) */

也不起作用,为啥不能用前缀索引;
0331执行计划.txt (4.7 KB)

可以把前缀索引换成正常的,试试能不能走上,能的话,再问问内核

1 个赞