update TIMAGEDATA_TD set MSISDNGROUPID=4 where IMSI >= 13600000000 and IMSI <= 13699999999; IMSI 是一個 char 類型的字段,可是存儲的都是數值類型(歷史問題)。。。mysql
咱們知道,oracle ,mysql 都是支持 字符型字段使用 數值的(也就是不加單引號) 查詢條件 直接上結果: 優化以前:
這裏能夠看到,在字符型 char 使用 數值來做爲條件查詢的時候,查詢時間是 24 秒以上, 這是明顯有問題的,trace 以後結果以下:
發現,CPU使用量,等待時間,物理IO請求都是異常的大。 好吧,不在多說,這裏就是一個經驗的問題,把查詢條件中的字符類型加上雙引號,以下:
trace 結果以下:
總結: 算是一個比較普通的習慣問題,通常人若是有好的習慣也不會有這樣的事情發生, 原理大概是不一樣類型的話,就須要對每一個字段進行類型轉換,那麼原有的字段索引就不能使用了, 由於這個表是一個千萬級別的大表,因此致使了全表掃描性能的降低是致命的。。