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

ko300 2016-08-04 11:47:47
有个表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 '测试' 索引有效

有人有过类似经验吗
...全文
211 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-08-05
  • 打赏
  • 举报
回复
索引失效,那是因为索引的效率低于走表扫描 出现这样的问题,常见有以下两种 猜一种原因,你的测试数据 是否"测试"内容占用行数过多,占总记录数比例>=50%以上 别一种原因,表的索引碎片过多,可通过重新索引解决 计算成本时会同时考虑以上两种情况 条件like和=占用的比例是不同的 like是会判断内容开头是否有"测试"字样,所以用=时不走索引,用like时会用到索引 你的情况,首先检查是否索引碎片过高,估计是这个原因引起的
spiritofdragon 2016-08-05
  • 打赏
  • 举报
回复
你说的失效,是否是看执行计划,没走 索引查找,而走了聚集索引扫描? 如果是这样,这不是说明索引失效,是,如果真走索引,速度反而不如 聚集索引扫描 快,优化器 优选所致。 至于为什么反而慢,就是建立的索引不合适所致,当然,也有可能是,某些情况建了索引也无用所致(参考,建索引的注意事项)
唐诗三百首 2016-08-05
  • 打赏
  • 举报
回复
请问LZ所说的"索引有效"和"索引无效"的判断标准是什么?
kingtiy 2016-08-05
  • 打赏
  • 举报
回复
你这个like其实就是=了. like '%测试%' like '测试%' like '%测试' 要增加匹配符才有效的like呢.

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧