SQL 百萬級別記錄優化之 -- 單引號帶來的性能降低

update TIMAGEDATA_TD set MSISDNGROUPID=4 where IMSI >= 13600000000 and IMSI <= 13699999999; IMSI 是一個 char 類型的字段,可是存儲的都是數值類型(歷史問題)。。。mysql

咱們知道,oracle ,mysql 都是支持 字符型字段使用 數值的(也就是不加單引號) 查詢條件
直接上結果: 
    優化以前:

輸入圖片說明

這裏能夠看到,在字符型 char 使用 數值來做爲條件查詢的時候,查詢時間是 24 秒以上,
這是明顯有問題的,trace 以後結果以下:

輸入圖片說明

發現,CPU使用量,等待時間,物理IO請求都是異常的大。
好吧,不在多說,這裏就是一個經驗的問題,把查詢條件中的字符類型加上雙引號,以下:

輸入圖片說明

trace 結果以下:

輸入圖片說明

總結: 算是一個比較普通的習慣問題,通常人若是有好的習慣也不會有這樣的事情發生,
原理大概是不一樣類型的話,就須要對每一個字段進行類型轉換,那麼原有的字段索引就不能使用了,
由於這個表是一個千萬級別的大表,因此致使了全表掃描性能的降低是致命的。。
相關文章
相關標籤/搜索