1. 程式人生 > 其它 >MYSQL update join慢SQL

MYSQL update join慢SQL

執行5分鐘還沒執行完;

explain update ind_shop t1 join
(
select shop_id,
(case when `value`='男裝' then 1
when `value`='女裝' then 2
when `value`='男女裝' then 3 else 0 end)
shop_sex
from tmp1014
where brand='未定' and `value`='男女裝'
) t2
on t1.shop_id=t2.shop_id
set t1.shop_sex = t2.shop_sex
where t1.shop_id=t2.shop_id;

執行計劃如下:

tmp1014為臨時表,資料量為3W左右;

ind_shop表資料庫33W,shop_id列是唯一索引列;

很明顯執行計劃有問題;為啥沒有走索引?

步驟1.欄位型別不一致

查詢發現:

tmp1014為bigint

ind_shop為varchar

調整後,執行計劃無變化;

步驟2.懷疑統計資訊不準

重新收集統計資訊後,執行計劃無變化;

這時候有點僵住;

仔細查看錶結構,發現結果集不一致,tmp1014為utf8,ind_shop為utf8mb4;

重新調整表的字符集,得到了正確的執行計劃;

執行時間為秒級別;