在mysql查詢中,當查詢條件左右兩側類型不匹配的時候會發生隱式轉換,可能導致查詢無法使用索引。下面分析兩種隱式轉換的情況
看表結構 phone為 int類型,name為 varchar

EXPLAIN select * from user where phone = '2'
EXPLAIN select * from user where phone = 2
兩種情況都可以用到索引,這次等號右側是'2',注意帶單引號喲,左側的索引字段是int類型,因此也會發生隱式轉換,但因為int類型的數字只有2能轉化為'2',是唯一確定的。所以雖然需要隱式轉換,但不影響使用索引,不會導致慢查詢
EXPLAIN select * from user where name= '2'
這種情況也能使用索引,因為他們本身就是varchar 類型

EXPLAIN select * from user where name= 2
因為等號兩側類型不一致,因此會發生隱式轉換,cast(index_filed as signed),然后和2進行比較。因為'2',' 2','2a'都會轉化成2,故MySQL無法使用索引只能進行全表掃描,造成了慢查詢的產生。

