模式匹配like'%XXX%'优化
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,在MySQL里,like'XXX%可以用到索引,但like '%XXX%'却不行,比如,以下这个案例:查看测试表行数:点击(此处)折叠或打开mysql> select count(*) from te
千家信息网最后更新 2026年11月02日模式匹配like'%XXX%'优化在MySQL里,like'XXX%可以用到索引,但like '%XXX%'却不行,比如,以下这个案例:
查看测试表行数:
这个测试表中,id是主键,叶子节点上保存了数据,从索引中就可以去到select的的id的列,不必读取数据行(只有select字段正好就是索引,那么就用到了覆盖索引),通过覆盖索引,减少I/O,提高性能。
优化之前的执行计划:
查看测试表行数:
点击(此处)折叠或打开
- mysql> select count(*) from test03;
- +----------+
- | count(*) |
- +----------+
- | 117584 |
- +----------+
点击(此处)折叠或打开
- mysql> explain select count(*) from test03 where username like '1%';
- +----+-------------+--------+-------+-----------------+-----------------+---------+------+-------+--------------------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+--------+-------+-----------------+-----------------+---------+------+-------+--------------------------+
- | 1 | SIMPLE | test03 | range | idx_test03_name | idx_test03_name | 302 | NULL | 58250 | Using where; Using index |
- +----+-------------+--------+-------+-----------------+-----------------+---------+------+-------+--------------------------+
- 1 row in set (0.03 sec)
- mysql> explain select count(*) from test03 where username like '%1%';
- +----+-------------+--------+-------+---------------+-----------------+---------+------+--------+--------------------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+--------+-------+---------------+-----------------+---------+------+--------+--------------------------+
- | 1 | SIMPLE | test03| index | NULL | idx_test03_name | 302 | NULL | 116500 | Using where; Using index |
- +----+-------------+--------+-------+---------------+-----------------+---------+------+--------+--------------------------+
- 1 row in set (0.00 sec)
这个测试表中,id是主键,叶子节点上保存了数据,从索引中就可以去到select的的id的列,不必读取数据行(只有select字段正好就是索引,那么就用到了覆盖索引),通过覆盖索引,减少I/O,提高性能。
优化之前的执行计划:
点击(此处)折叠或打开
- mysql> explain select count(*) from test03 where username like '%1%';
- +----+-------------+--------+------+---------------+------+---------+------+------+-------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+--------+------+---------------+------+---------+------+------+-------------+
- | 1 | SIMPLE | test03 | ALL | NULL | NULL | NULL | NULL | 7164 | Using where |
- +----+-------------+--------+------+---------------+------+---------+------+------+-------------+
点击(此处)折叠或打开
- mysql> explain select count(*) from test03 a join (select id from test03 where username like '%1%') b on a.id=b.id;
- +----+-------------+------------+--------+---------------+---------+---------+------+------+-------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+------------+--------+---------------+---------+---------+------+------+-------------+
- | 1 | PRIMAR | <derived2> | ALL | NULL | NULL | NULL | NULL | 7164 | NULL |
- | 1 | PRIMARY | a | eq_ref | PRIMARY | PRIMARY | 8 | b.id | 1 | Using index |
- | 2 | DERIVED | test03 | ALL | NULL | NULL | NULL | NULL | 7164 | Using where |
- +----+-------------+------------+--------+---------------+---------+---------+------+------+-------------+
索引
数据
测试
不行
只有
叶子
字段
就是
思路
性能
案例
节点
模式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网为科技
期待互联网科技
广西互联网科技公司
兼蜜互联网科技
金融科技和互联网金融
云创客互联网科技公司
小米互联网科技园设置
欧洲十大科技互联网公司
互联网科技创新服务
互联网金融中的现代科技
互联网科技革命什么开始
996高科技互联网公司
允成互联网科技有限公司融资
元气玛特互联网科技公司是外包吗
云南省自由互联网科技有限公司
风投北京互联网科技
银川新华互联网科技学校原画
三亚科技创新互联网基地
科技发展第三阶段互联网时代
互联网 科技节活动 微视频大赛
科技互联网
广州万易互联网科技有限公司
大白互联网科技
互联网前沿科技
阿里互联网科技公司
沐思想互联网科技有限公司
从那以后互联网科技有限公司
科技互联网行业投资研究
易租星互联网科技有限公司
安徽九吞吴互联网科技有限公司