模式匹配like'%XXX%'优化
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,在MySQL里,like'XXX%可以用到索引,但like '%XXX%'却不行,比如,以下这个案例:查看测试表行数:点击(此处)折叠或打开mysql> select count(*) from te
千家信息网最后更新 2025年11月12日模式匹配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安全错误
数据库的锁怎样保障安全
echarts链接数据库
胶州微信公众号软件开发系统
华为软件开发招聘历年考题
一个软件开发要多久
厦门海中互联网科技有限公司
村社区护苗网络安全课
团委网络安全宣传周
计算机网络技术的技能证
手机网络安全隐患心得体会
方舟非主机服务器加模组能进吗
数据库弱密码探测
广东电信网络安全认证考试
金华众游网络技术有限公司游戏
怎么解除手机无法连接服务器
网站服务器在哪里
郑州嵌入式软件开发哪家实惠
存储库数据库
2015网络安全知识竞赛
税务局做好网络安全的新闻
纵点网络技术有限公司
内网dns服务器设置
网络安全手抄报高质量a3
测试软件开发哪家强
谷歌地球无法连接到数据库贴吧
淘宝上的地图服务器
党委网络安全工作责任制考核
翻译软件开发用什么app
传奇4尚未选择世界服务器
微信存储空间数据库恢复吗
人类享受了网络技术带来的方便