MySQLl数据量不一样,导致走不同的索引
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,1、测试环境:MySQL 5.7.172、测试表结构mysql> show create table a;+-------+--------------------------------------
千家信息网最后更新 2025年11月10日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安全错误
数据库的锁怎样保障安全
网络安全四个坚持主题生活会
网络安全新股奇安信
程序员对数据库掌握程度要求
服务器登录不了无线网络
守好网络安全三道防线
小学二年级网络安全教育
苹果系统服务器请求发生了错误
软件开发人员有什么价值需求
软件开发方案模型设计
腾讯服务器与供应链管理部
吉林省南方电网网络安全
用sql显示数据库名字
吉林软件开发自学网教学视频
软件开发货物还是服务
七天网络安全插画
服务器无尘机房
深圳外地车预约申请服务器忙
软测数据库面试
AI量化数字货币软件开发
有关计算机软件开发的大学
热血传奇手游服务器卡
怎么提高sql服务器数据库速度
命运2 服务器
滕州德雅互联网科技有限公司
高端软件开发需要几百万么
云服务器怎么接桌面
网络安全小事项60字
时序数据库技术指标
湖南株洲维修服务器云主机
国外最新网络技术