Mysql like不走索引实现方法
流程图
flowchart TD
A(开始) --> B(创建表)
B --> C(插入数据)
C --> D(创建索引)
D --> E(查询数据)
E --> F(使用like不走索引)
F --> G(使用正则表达式)
G --> H(查询数据)
H --> I(结束)
步骤及代码实现
1. 创建表
首先,我们需要创建一张表来演示这个问题。
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name_index` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
上面的代码创建了一个名为users
的表,表中包含两个字段:id
和name
。id
是主键,name
字段我们将会使用它来演示like
不走索引的问题。
2. 插入数据
接下来,我们需要向表中插入一些数据。
INSERT INTO `users` (`name`) VALUES ('John'), ('Michael'), ('Robert'), ('David'), ('William'), ('James');
上面的代码向users
表中插入了6条数据。
3. 创建索引
为了验证like
不走索引的问题,我们需要在name
字段上创建一个索引。
ALTER TABLE `users` ADD INDEX `name_index` (`name`);
上面的代码创建了一个名为name_index
的索引,该索引会加快我们对name
字段的模糊查询操作。
4. 查询数据(未使用like)
首先,我们来验证一下正常情况下使用like
走索引的查询。
EXPLAIN SELECT * FROM `users` WHERE `name` LIKE 'John%';
上面的代码使用了EXPLAIN
关键字来查看查询的执行计划,LIKE
操作符后的'John%'
表示模糊匹配以John
开头的名字。
执行以上代码后,你会发现查询结果中的type
列为ref
,表示该查询会使用索引。
5. 使用like不走索引
接下来,我们尝试使用like
但不走索引的查询。
EXPLAIN SELECT * FROM `users` WHERE `name` LIKE '%o%';
上面的代码使用LIKE
操作符后的'%o%'
表示模糊匹配包含字母o
的名字。
执行以上代码后,你会发现查询结果中的type
列为ALL
,表示该查询不会使用索引。
6. 使用正则表达式
为了解决like
不走索引的问题,我们可以使用正则表达式来替代like
操作。
EXPLAIN SELECT * FROM `users` WHERE `name` REGEXP 'o';
上面的代码使用了REGEXP
关键字并指定了一个正则表达式'o'
,表示匹配包含字母o
的名字。
执行以上代码后,你会发现查询结果中的type
列为ref
,表示该查询会使用索引。
7. 查询数据(使用正则表达式)
最后,我们来验证一下使用正则表达式进行查询的结果。
SELECT * FROM `users` WHERE `name` REGEXP 'o';
上面的代码会返回包含字母o
的名字。
至此,我们已经完成了如何实现mysql like不走索引
的教学。
序列图
sequenceDiagram
participant 小白
participant 开发者
小白->>开发者: 请问怎么实现“mysql like不走索引”?
开发者->>小白: 首先,你需要创建一张表,然后插入数据...
小白->>开发者: 好的,我明白了
开发者->>小白: 然后,你需要在其中一个字段上创建索引...
小白->>开发者: 好的,我已经创建了索引
开发者->>小