MySQL索引,查询中like 百分号 能用索引吗?

本文介绍了MySQL中,尽管通常`LIKE '%abc%'`无法使用索引,但在特定情况下,如索引列数量少于表列数量时,优化器可能会选择全索引扫描,从而在某些场景下利用到索引。通过分析执行计划中的`type: index`和`Using index`,揭示了这种特殊用法的可能性。并鼓励读者思考开发规范的改进和SQL优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子

上述问题的一般情况下,答案肯定是不能,但既然提问了,那肯定有能用的情况

为此,详细介绍下

首先我们先创建一个表

show create table test1\G
*************************** 1. row ***************************
Table: test1
Create Table: CREATE TABLE `test1` (
`id` varchar(10) DEFAULT NULL,
`n` varchar(10) DEFAULT NULL,
KEY `ix_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

运行如下查询 ,得到3行数据

select * from test1;
+------+------+
| id | n |
+------+------+
| 1000 | NULL |
| NULL | NULL |
| 1 | a |
+------+------+
3 rows in set (0.00 sec)

运行问题中的 like ‘%abc%’ 形式的SQL 语句 如下

其中id 列是有索引ix_id 的

desc select * from test1 where id like '%1000%'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: test1
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1
filtered: 100.00
Extra: Using where
1 row in set, 1 warning (0.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值