书写技术成长之路

MySQL之细节决定成败

今天无意中查下数据,发现了个奇怪的现象,在一条几十万数据的表中分明已经建了索引,还是使用了全表扫描。

在members表中有一个记录会员手机号的phone字段,由于经常根据手机号来进行查找而且数据量也开始上来了,就在phone表中加了个普通索引, phone的类型是varchar(20), 可是今天查找的时候竟然使用了全表扫描,可是看了表中的索引,确实已经在phone字段上建了索引,很奇怪为什么会出现这种情况。

最后发现这是由于查找写的值类型和字段的类型不一样导致MySQL无法使用索引优化.

WechatIMG102.jpeg

看到区别了吗,由于我在查询的时候phone=134321直接是integer类型的,而phone是varchar类型的,就导致最后查询的时候没有用到索引,但是却出现在了possible_keys中,而当使用phone='134321'时,执行查询就可以用到索引,rows便是最明显的区别。