MySQLl数据量不一样,导致走不同的索引
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,1、测试环境:MySQL 5.7.172、测试表结构mysql> show create table a;+-------+--------------------------------------
千家信息网最后更新 2026年11月01日MySQLl数据量不一样,导致走不同的索引
1、测试环境:MySQL 5.7.17
2、测试表结构
mysql> show create table a;+-------+--------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+-------+--------------------------------------------------------------------------------------------------------------------------------------+| a | CREATE TABLE `a` ( `id` int(11) NOT NULL, `name` char(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=gbk |+-------+--------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)
mysql> show create table b;+-------+------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+-------+------------------------------------------------------------------------------------------------------------------------------------+| b | CREATE TABLE `b` ( `id` int(11) NOT NULL, `tx` char(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=gbk |+-------+------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)
3、两张表的数据量
mysql> select count(*) from a;+----------+| count(*) |+----------+| 7 |+----------+1 row in set (0.00 sec)mysql> select count(*) from b;+----------+| count(*) |+----------+| 10 |+----------+1 row in set (0.00 sec)
4、查看执行计划
mysql> explain select name from a,b where a.id=b.id;+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| 1 | SIMPLE | a | NULL | ALL | PRIMARY | NULL | NULL | NULL | 7 | 100.00 | NULL || 1 | SIMPLE | b | NULL | eq_ref | PRIMARY | PRIMARY | 4 | apex.a.id | 1 | 100.00 | Using index |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+2 rows in set, 1 warning (0.00 sec)
mysql> explain select name from a,b where b.id=a.id;+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| 1 | SIMPLE | a | NULL | ALL | PRIMARY | NULL | NULL | NULL | 7 | 100.00 | NULL || 1 | SIMPLE | b | NULL | eq_ref | PRIMARY | PRIMARY | 4 | apex.a.id | 1 | 100.00 | Using index |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+2 rows in set, 1 warning (0.00 sec)
mysql> explain select name from b,a where b.id=a.id;+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| 1 | SIMPLE | a | NULL | ALL | PRIMARY | NULL | NULL | NULL | 7 | 100.00 | NULL || 1 | SIMPLE | b | NULL | eq_ref | PRIMARY | PRIMARY | 4 | apex.a.id | 1 | 100.00 | Using index |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+2 rows in set, 1 warning (0.00 sec)
5、向a表插入3数据,使两表数据量一样,查看执行计划,发现第三条语句的执行计划发生了变化
mysql> insert into a values(8,'test');Query OK, 1 row affected (0.00 sec)mysql> insert into a values(9,'test');Query OK, 1 row affected (0.00 sec)mysql> insert into a values(10,'test');Query OK, 1 row affected (0.01 sec)mysql> select count(*) from a;+----------+| count(*) |+----------+| 10 |+----------+1 row in set (0.00 sec)
mysql> explain select name from a,b where a.id=b.id;+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| 1 | SIMPLE | a | NULL | ALL | PRIMARY | NULL | NULL | NULL | 10 | 100.00 | NULL || 1 | SIMPLE | b | NULL | eq_ref | PRIMARY | PRIMARY | 4 | apex.a.id | 1 | 100.00 | Using index |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+2 rows in set, 1 warning (0.00 sec)
mysql> explain select name from a,b where b.id=a.id;+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| 1 | SIMPLE | a | NULL | ALL | PRIMARY | NULL | NULL | NULL | 10 | 100.00 | NULL || 1 | SIMPLE | b | NULL | eq_ref | PRIMARY | PRIMARY | 4 | apex.a.id | 1 | 100.00 | Using index |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+2 rows in set, 1 warning (0.00 sec)
mysql> explain select name from b,a where b.id=a.id;+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| 1 | SIMPLE | b | NULL | index | PRIMARY | PRIMARY | 4 | NULL | 10 | 100.00 | Using index || 1 | SIMPLE | a | NULL | eq_ref | PRIMARY | PRIMARY | 4 | apex.b.id | 1 | 100.00 | NULL |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+2 rows in set, 1 warning (0.00 sec)
6、向a表插入1条数据,使a表数据量大于b表,查看执行计划,三条语句执行计划都发现了变化
mysql> insert into a values(11,'test');Query OK, 1 row affected (0.01 sec)mysql> select count(*) from a;+----------+| count(*) |+----------+| 11 |+----------+1 row in set (0.00 sec)
mysql> explain select name from a,b where a.id=b.id;+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| 1 | SIMPLE | b | NULL | index | PRIMARY | PRIMARY | 4 | NULL | 10 | 100.00 | Using index || 1 | SIMPLE | a | NULL | eq_ref | PRIMARY | PRIMARY | 4 | apex.b.id | 1 | 100.00 | NULL |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+2 rows in set, 1 warning (0.00 sec)
mysql> explain select name from a,b where b.id=a.id;+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| 1 | SIMPLE | b | NULL | index | PRIMARY | PRIMARY | 4 | NULL | 10 | 100.00 | Using index || 1 | SIMPLE | a | NULL | eq_ref | PRIMARY | PRIMARY | 4 | apex.b.id | 1 | 100.00 | NULL |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+2 rows in set, 1 warning (0.00 sec)
mysql> explain select name from b,a where b.id=a.id;+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+| 1 | SIMPLE | b | NULL | index | PRIMARY | PRIMARY | 4 | NULL | 10 | 100.00 | Using index || 1 | SIMPLE | a | NULL | eq_ref | PRIMARY | PRIMARY | 4 | apex.b.id | 1 | 100.00 | NULL |+----+-------------+-------+------------+--------+---------------+---------+---------+-----------+------+----------+-------------+2 rows in set, 1 warning (0.01 sec)
数据
语句
三条
变化
测试
环境
结构
不同
索引
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
喔噻互联网科技有限公司
博彦科技互联网金融
哈尔滨大商圈互联网科技有限公司
广州大一互联网络科技有限公司
互联网和科技创新
互联网金融公司科技
万易互联网科技有限公司
奇酷互联网络科技公司
互联网科技logo设计
苏州大垚互联网科技
汉立互联网科技有限公司联系电话
须眉科技是互联网公司吗
互联网教育科技公司vipkid
成都铂石互联网科技做什么的
知域互联网科技有限公司大骗子
互联网科技研发水平
国大互联网教育科技有限公司工作
威龙国际互联网科技公司
互联网科技包装股
昆明中奇联合互联网科技
广州紫鲸互联网科技有限公司
科技赋能下的互联网金融
礼当家互联网科技
互联网与未来科技
互联网金融科技创新
互联网科技与大数据专业
山东大美朱楼互联网科技有限公司
上海万顺科技互联网有限公司招聘
现代互联网科技公司
瑞安市蟠桃会互联网科技有限公司