问题: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;
再修改对应字段长度为一致