天天看點

記一次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;

再修改對應字段長度為一緻