有个表6百万条数据左右,列大概100多个,一个varchar(100) 的字段,建了非聚集索引
select * from table where col like 'aa' 英文,索引有效,所有英文或数字都有效
select * from table where col like '测试a' 中英文混合,索引有效
select * from table where col ='测试' 中文,索引有效,等号时有效
select * from table where col like '测试' 索引无效,小于4个字符纯中文,试了都是无效
但
select * from table where col like '测试测试' 索引有效,4个中文以上都有效
select col from table where col like '测试' 索引有效
按你这样写的,根本没用到模糊查询,何不用等号呢?
大部分场景都是用'测试%'的,只是没写而已
@懒神: 右% like 不走索引。
100多列?
既然建立了索引,那就肯定都是有效的,除非你like %开头,这样会全表扫描
select * from table where col like '测试' --这个如果查询没有走索引的话,是不是很慢?如果不是很慢的话你就不用关心了,说明数据库走的可能是缓存,也可能是你的那个字段在数据库中没有两个字符的数据,都是4个字符以上的数据,这些机制数据库都给你弄好了,你只要关心效率就好了
你看看那个无效索引 是不是 查询计划不一样导致的 查询慢 而不是因为没命中索引导致的慢