今天无意中查下数据,发现了个奇怪的现象,在一条几十万数据的表中分明已经建了索引,还是使用了全表扫描。
在members表中有一个记录会员手机号的phone字段,由于经常根据手机号来进行查找而且数据量也开始上来了,就在phone表中加了个普通索引,
phone的类型是varchar(20)
, 可是今天查找的时候竟然使用了全表扫描,可是看了表中的索引,确实已经在phone字段上建了索引,很奇怪为什么会出现这种情况。
最后发现这是由于查找写的值类型和字段的类型不一样导致MySQL无法使用索引优化.
看到区别了吗,由于我在查询的时候phone=134321
直接是integer
类型的,而phone是varchar
类型的,就导致最后查询的时候没有用到索引,但是却出现在了possible_keys
中,而当使用phone='134321'
时,执行查询就可以用到索引,rows
便是最明显的区别。