最近做性能优化,发现这样一个现象,100万条数据量对同一个字段采用=和like ‘key%’不同的查询方式查询结果,结果like的查询更快。
测试造的数据中有一个列的值塞入的是同样的值,该列加了索引,但通过explian发现虽然是索引列但实际运行时还是全文搜索并没有用索引。后来将该列更新成区分度较高的值,通过explian发现这时是使用了索引。
就其原因,以下有两点观点:
1.数据区分度不高,导致索引失效,mysql认为全文搜索比通过索引搜索还要快;
2.查询就是匹配字段,=key是完全匹配,like ‘key%’ 是部分匹配,匹配到key的一部分值就结束,(但‘%key%’一定是很慢的)