記一次mysql不走索引的問題定位

2021-10-03 10:01:38 字數 516 閱讀 2284

問題:sql為三表關聯,關聯的字段上都加上了唯一索引,查詢時卻不走索引導致sql執行超時。檢視explain都走的all全表掃瞄。

基於上述定位:為什麼沒走索引呢?

進行多表關聯查詢時,要滿足:

1、表關聯使用的條件欄位中字段的長度是否是一致的

2、兩表關聯使用的條件欄位中字段的編碼是否是一致的

以上兩個條件如果未滿足,是用不上索引的,我的情況就是兩個條件都不滿足引起的

再檢視資料庫,發現初始化表字符集各不相同,於是進行全表字符集修改:

select concat('alter table `***x`.`',table_name,'` convert to character set utf8mb4;') from information_schema.tables where table_schema='***x' ;

生成sql語句:alter table `***x`.`***` convert to character set utf8mb4;

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

記一次MySQL索引優化

兩張表是主 check drawings 從 check drawings img 關係。check drawings,主表資料 3591條。select count from check drawings 3591 check drawings img,從表資料107203條,資料量並不大,從表通...

記一次mysql死鎖問題

場景 innodb下不同的事務進行更新和插入操作導致資料庫死鎖,如下,在批量插入之前,進行了邏輯刪除操作,這段 在併發情況下出現死鎖 堆疊異常 deadlock found when trying to get lock try restarting transaction 更新操作sql 批量插入...

記一次mysql鎖超時問題

排查過程 select from information schema.innodb lock waits select from information schema.innodb trx show engine innodb status show variables like autocomm...