模糊查询能否或者怎么使用索引
前言
众所周知,在索引时,如果模糊查询的%置于最前面,索引会失效。但是在%前置时,什么情况下会使用到索引?
补充
-
like %keyword
索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。 -
like keyword%
索引有效。 -
like %keyword%
索引失效,也无法使用反向索引。
解决
方式一
反转模糊查询的字段,但是注意,对于%keywork%
的索引,此方法是无效的。
select * from company where companyName like '%江南皮革长';
我们可以改造为:
select * from company where reverse(companyName) like reverse('%江南皮革长');
方式二
首先我们有TEST_USER表:
CREATE TABLE `USER` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`NAME` varchar(64) DEFAULT NULL COMMENT '名字',
`MOBILE` varchar(11) DEFAULT NULL COMMENT '手机号',
PRIMARY KEY (`ID`),
KEY `INDEX_MOBILE` (`MOBILE`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试的用户表';
只查询索引
EXPLAIN SELECT
MOBILE
FROM
USER
WHERE
MOBILELIKE '%151'
Extra:Using index. (走索引)
查索引字段和主键
EXPLAIN SELECT
ID,MOBILE
FROM
USER
WHERE
MOBILE LIKE '%151'
Extra:Using index. (走索引)
查非索引字段
EXPLAIN SELECT
MOBILE,NAME
FROM
USER
WHERE
MOBILE LIKE '%151'
Extra:Using where. (不走索引)
where后面多条件
where后跟普通条件
EXPLAIN SELECT
MOBILE
FROM
USER
WHERE
NAME = '江南皮革厂'
AND MOBILE LIKE '%151'
Extra:Using where. (不走索引)
where后跟主键
EXPLAIN SELECT
MOBILE
FROM
USER
WHERE
ID >1
AND MOBILE LIKE '%151'
Extra:Using index. (走索引)
总结
like查询百分号前置,并不是100%不会走索引。
如果只select索引字段,或者select索引字段和主键,也会走索引的。
如果where条件中有主键时,走索引。
一句话:在select和where中存在除了索引和主键外的其他条件或字段时,不走索引。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix