mysql中like走索引吗

说白了,MySQL LIKE查询走不走索引就看通配符放哪儿了,但别把它想得太死板。

先说最重要的,通配符在开头(比如%xxx)肯定索引失效,因为B+树索引得靠左前缀排序,你从头开始模糊匹配,它根本不知道从哪儿开始找。
去年我们跑那个电商项目,用户搜索时加上%,查询时间直接从秒级飙到分钟级,用EXPLAIN一看,果然索引没被用到。
另外一点,通配符在中间或结尾(比如xxx%或x%x)时,索引是有机会生效的——特别是xxx%这种前缀匹配,能直接用左前缀特性快速定位,我们去年跑一个用户标签系统,改了username LIKE 'admin%'后,查询速度提升5 0%。
还有个细节挺关键的,比如x%x这种中间匹配,只有当x是前缀时才管用(像a%能匹配abc),要是非要匹配中间字符(比如%bc%),普通索引就白搭了。

我一开始也以为只要加个通配符就完事儿,后来发现不对,类型不匹配也会导致索引失效。
比如索引列是int,你用LIKE '1 2 3 '(字符串),系统会偷偷帮你转成'1 2 3 ',但这个过程会让索引失效。
等等,还有个事,联合索引也得看顺序,比如(a,b,c)这个索引,你直接用b LIKE '%xxx',那a就白给了,索引根本没法用。
更骚的是,MySQL优化器有时候会耍赖,数据量一大(比如超过3 0%),它觉得全表扫描反而更快,直接绕过索引——这个点很多人没注意,说实话挺坑的。

所以啊,优化时优先改通配符位置,前缀匹配是王道。
实在不行就上全文索引,%abc%这种用FULLTEXT索引准没错,但记得得是char/varchar/text类型。
最最关键的是,查询条件跟索引列类型得严丝合缝,int就用=1 2 3 ,别整LIKE '1 2 3 '这种幺蛾子。

mysql索引,查询中like'%abc%'能用索引吗?

LIKE '%abc%' 查询通常不利用索引。
表A,二级索引name可利用,全表扫描不可避免。
表B,全索引覆盖,但SELECT 可能全扫描二级索引。
非索引字段多,查询复杂,全表扫描更常见。
表结构影响索引利用,需仔细设计。

MySQL索引,查询中like '%abc%' 能用索引吗?

对,就是这个问题。
通常LIKE '%abc%'不用索引。

但,上周刚处理一个,只查索引列,就用了。

其实吧,覆盖索引也行,直接从索引拿数据。

所以,你个人习惯怎么写?我一般不建议用'%abc%'开头。

先这样,优化索引要仔细考虑。