模式匹配like'%XXX%'优化
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,在MySQL里,like'XXX%可以用到索引,但like '%XXX%'却不行,比如,以下这个案例:查看测试表行数:点击(此处)折叠或打开mysql> select count(*) from te
千家信息网最后更新 2025年01月24日模式匹配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安全错误
数据库的锁怎样保障安全
瑞丽手机软件开发
ccdc怎么上传数据库
学什么网络技术最好学
关于规范网络安全的检察建议
数据库系统包含
高频交易服务器私募
计算机网络技术班级的口号
兴化小型网络技术批发价
蚂蚁国际事业群全球网络技术
食品网络安全知识竞赛
普法网警解读网络安全法
网络安全范围是多少
2018互联网科技类公司
微众银行网络技术笔试
软件开发人员怎么整理总结
服务器小游戏如何制作
计算机三级数据库抽题重复率
山东省高中网络技术
中国农业银行软件开发中心好吗
河北省关于网络安全工作部署
托福模考软件开发
软件开发技术专业前景
摩尔庄园安卓和ios服务器
会员选货商城软件开发
软件开发tips
数据库系统评估安全性能
网络安全手报写字内容
oracle查询数据库锁库
魔域服务器网络堵塞怎么回事
谷歌服务器ip地址和密钥