MySql学习笔记(六):扫描范围
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,explain的type列表示该条查询的扫描范围,一共有七种,效果由上到下排列:system>const>eq_ref>ref>range>index>all。数据准备:CREATE TABLE `t
千家信息网最后更新 2025年02月24日MySql学习笔记(六):扫描范围
explain的type列表示该条查询的扫描范围,一共有七种,效果由上到下排列:
system>const>eq_ref>ref>range>index>all。
数据准备:
CREATE TABLE `t_blog` ( `id` int(11) NOT NULL auto_increment, `title` varchar(50) default NULL, `typeId` int(11) default NULL, PRIMARY KEY (`id`), UNIQUE KEY `title_index` (`title`), KEY `type_index` (`typeId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8CREATE TABLE `t_type` ( `id` int(11) NOT NULL auto_increment, `name` varchar(20) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
1、system
该表中只有一行记录,这种情况在日常开发中很少见,不多赘述;
2、const
表示通过索引一次就找到了结果,用于扫描主键和唯一索引,例如:
mysql> explain select * from t_blog where id = 1;+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+| 1 | SIMPLE | t_blog | const | PRIMARY | PRIMARY | 4 | const | 1 | |+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+1 row in set
在where子句中,id为主键且值为一个常数,在id索引中只有一条数据与之对应。
3、eq_ref
通过主键和唯一索引,只有一条数据与之匹配,例如:
mysql> explain select b.* from t_blog b left join t_type t on b.typeId = t.id;+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------------+| 1 | SIMPLE | b | ALL | NULL | NULL | NULL | NULL | 7 | || 1 | SIMPLE | t | eq_ref | PRIMARY | PRIMARY | 4 | blog.b.typeId | 1 | Using index |+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------------+2 rows in set
eq_ref和const都表示在唯一索引或主键的作用下,只找到一行与之匹配的数据。const表示按主键和唯一索引读取,eq_ref通常体现在连表上,按连表的主键和唯一索引读取。
4、ref
非唯一索引扫描,有多个行与之匹配
mysql> explain select * from t_blog where typeId = 4;+----+-------------+--------+------+---------------+------------+---------+-------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+--------+------+---------------+------------+---------+-------+------+-------------+| 1 | SIMPLE | t_blog | ref | type_index | type_index | 5 | const | 1 | Using where |+----+-------------+--------+------+---------------+------------+---------+-------+------+-------------+1 row in set
typeId是表的普通索引,即非唯一索引,与eq_ref最大的区别在于ref表示非唯一索引扫描。
5、range
表示范围,使用索引选择行,使用了 > < in beteen等
mysql> EXPLAIN select * from t_blog where id>2;+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+| 1 | SIMPLE | t_blog | range | PRIMARY | PRIMARY | 4 | NULL | 3 | Using where |+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+1 row in set
6、index
遍历索引树,读全表
mysql> EXPLAIN select id from t_blog;+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+| 1 | SIMPLE | t_blog | index | NULL | PRIMARY | 4 | NULL | 7 | Using index |+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+1 row in set
只查询id,所以只遍历索引文件即可,不需要从硬盘中读取,比all快。
7、all
读全表,不使用任何索引,从硬盘中读数据,最慢
mysql> explain select * from t_blog;+----+-------------+--------+------+---------------+------+---------+------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+--------+------+---------------+------+---------+------+------+-------+| 1 | SIMPLE | t_blog | ALL | NULL | NULL | NULL | NULL | 7 | |+----+-------------+--------+------+---------------+------+---------+------+------+-------+1 row in set
*在一般的开发过程中,达到ref即可
索引
数据
只有
非唯
范围
一行
硬盘
开发
查询
普通
最大
作用
多个
子句
常数
情况
效果
文件
结果
过程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
开发者分布式云服务器
远程服务器访问数据库权限怎么开
虚拟商品怎么发数据库
沈阳软件开发驻场代理
服务器显示未检测到机械硬盘
网络安全监测装置入侵检测
mysql 当前数据库名
中国移动服务器电源标准
服务器gpu如何使用
辽宁网络时间服务器同步时出错
怎么看电脑的服务器
帝国数据库文件
正规app软件开发培训学校
数据库的数据清洗方法
研究生查分软件开发
什么数据库适合存储文本数据
昌平区口碑好的软件开发
明日之后服务器有没有角色
青阳微型软件开发服务解决方案
数据库几大公司
db2导出单表表数据库表
网络安全的电子小报资料
数据库转为geojason
tbc中文数据库
网络安全模型f2dr什么意思
郑大网络安全研究院工程采购
北京软件开发工程师待遇
北京专业软件开发公司
天津专业服务器云空间
校园无线网络安全监测