首页 新闻 会员 周边

部分中文索引失效诡异问题

0
悬赏园豆:100 [待解决问题]

有个表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 '测试'    索引有效


懒神的主页 懒神 | 初学一级 | 园豆:107
提问于:2016-08-04 23:50
< >
分享
所有回答(4)
1

按你这样写的,根本没用到模糊查询,何不用等号呢?

CodeHsu | 园豆:5468 (大侠五级) | 2016-08-05 09:12

大部分场景都是用'测试%'的,只是没写而已

支持(0) 反对(0) 懒神 | 园豆:107 (初学一级) | 2016-08-05 09:48

@懒神:  右% like 不走索引。

支持(0) 反对(0) Постой! | 园豆:1084 (小虾三级) | 2016-08-09 09:44
0

100多列?

顾晓北 | 园豆:10844 (专家六级) | 2016-08-05 09:37
0

既然建立了索引,那就肯定都是有效的,除非你like %开头,这样会全表扫描

select * from table where col like '测试'  --这个如果查询没有走索引的话,是不是很慢?如果不是很慢的话你就不用关心了,说明数据库走的可能是缓存,也可能是你的那个字段在数据库中没有两个字符的数据,都是4个字符以上的数据,这些机制数据库都给你弄好了,你只要关心效率就好了

刘宏玺 | 园豆:14020 (专家六级) | 2016-08-05 10:08
0

你看看那个无效索引 是不是 查询计划不一样导致的 查询慢 而不是因为没命中索引导致的慢

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-08-05 11:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册