爲何不使用個人索引?

事件重現

SELECT * FROM `waybill` WHERE send=1
possible_keys : send
key : null
using : where

這麼簡單的查詢,明明只有一個索引字段,爲什麼 Mysql 沒有使用對應的索引?sql

結果

通過反覆查詢,終於發現問題。 send 的類型是 varchar 字符型,不是數值型,致使了這個錯誤,解決方法是要麼把 send 改成數值型要麼在查詢的時候加上雙引號函數

SELECT * FROM `waybill` WHERE send='1'

相似狀況

  • like 「%xxx」code

  • not in , !=索引

  • 對列進行函數運算的狀況(如 where md5(password) = 「xxxx」)事件

  • WHERE index=1 OR A=10md5

  • 存了數值的字符串類型字段(如手機號),查詢時記得不要丟掉值的引號,不然沒法用到該字段相關索引,反之則不要緊
    也即字符串

select * from test where mobile = 13711112222;
相關文章
相關標籤/搜索