天天看点

记一次mysql不走索引的问题定位

问题:sql为三表关联,关联的字段上都加上了唯一索引,查询时却不走索引导致sql执行超时。查看EXPLAIN都走的ALL全表扫描。

基于上述定位:为什么没走索引呢?

进行多表关联查询时,要满足:

1、表关联使用的条件字段中字段的长度是否是一致的

2、两表关联使用的条件字段中字段的编码是否是一致的

以上两个条件如果未满足,是用不上索引的,我的情况就是两个条件都不满足引起的

再查看数据库,发现初始化表字符集各不相同,于是进行全表字符集修改:

    select concat('ALTER TABLE `XXXX`.`',table_name,'` CONVERT TO CHARACTER SET utf8mb4;') from information_schema.tables where table_schema='XXXX' ;

生成sql语句:ALTER TABLE `xxxx`.`***` CONVERT TO CHARACTER SET utf8mb4;

再修改对应字段长度为一致