个人随笔
目录
故障篇:字段类型不同导致连表查询索引失效
2021-04-28 11:43:13

生产案例

突然发现生产环境mybatis执行一条简单的查询操作耗时很久,觉得有点奇怪,通过PLSQL按F5看执行计划,发现其中有一个表执行的是全表扫描,索引失效了?研究了很久也没发现问题!最后发现是当局者迷。
sql大概如下:

  1. select t1.name from table1 t1,table2 t2 where t1.actionid=t2.actionid and t2.cstm_no='1';

我在他table1的actionid加了索引,在table2表的cstm_no也加上了索引,可惜结果却只有cstm_no索引生效,table1却用了全表扫描!

想了很久也想不通,因为这两个表都不是我建的,所以我自动忽略了一些基本事实原则!

单独把table1拿出来

  1. select t1.name from table1 t1 where t1.actionid='123123';

完美的执行了索引查询!

原因

最后才发现,这两个表的actionid字段类型不同,table1是varchar2,table2是number!我的天!

解决办法

1、修改sql,加上to_char

  1. select t1.name from table1 t1,table2 t2 where t1.actionid=to_char(t2.actionid) and t2.cstm_no='1';

这种情况需要改代码,但是改动不多!

2、修改表字段类型

直接把table1改为number即可,但是需要做一些备份然后再修改
这种情况下也要改代码,代码里保存的时候actionid就不能用varchar2了。

总结

多么智障的错误啊!

 488

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2