mysql 索引 范围扫描_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=utf8
CREATE 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即可
mysql 索引 范围扫描_MySql学习笔记(六):扫描范围相关推荐
- mysql 查找相似数据_MySQL学习笔记之索引
索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...
- mysql 加号的作用_MySQL学习笔记(一)
MySQL学习笔记(一) 作者:易成勇 案例来源:AI技术前线 MySQL常用命令 1.查看当前所有数据库 show databases; 2.打开指定的库 use 库名 3.查看当前库的所有表 sh ...
- mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法
本文实例讲述了MySQL学习笔记之数据的增.删.改实现方法.分享给大家供大家参考,具体如下: 一.增加数据 插入代码格式: insert into 表明 [列名-] values (值-) creat ...
- mysql传小马_Mysql 学习笔记
1.关系型数据库 关系:由行和列组成的二维表 表:至少要有列,可以没有行. 列:是实体的属性. 数据模型:层次模型.网状模型.关系模型.非关系模型. DBMS:DataBase Mangenent S ...
- mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁
一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...
- mysql 去重后拼接_mysql学习笔记(三)—— 查询select
本节主要介绍查询语句(select),包括基础查询.条件查询.模糊查询,以及一些常用函数包括:去重函数distinct.字符拼接函数concat.null判断函数ifnull. 内容都是自己学习后从S ...
- linux将mysql的错误连接数_Mysql学习笔记(十二) 并发参数调节
mysql是多线程结构,包括后台线程和客户服务线程,多线程可以有效利用服务器资源,提高数据库的并发性能.在mysql的并发能力上,主要有有下列参数界定.分别为max_connections,back_ ...
- mysql悲观锁 更新_MySQL学习笔记(四)悲观锁 for update
恼骚 最近在搞并发的问题,订单的异步通知和主动查询会存在并发的问题,用到了Mysql数据库的 for update 锁 在TP5直接通过lock(true),用于数据库的锁机制 Db::name('p ...
- mysql 3.5安装_MYSQL学习笔记-06-搭建数据库
文章内容输出来源:拉勾教育Java高薪训练营 1. 安装说明 基于Ubuntu Linux系统安装,MySQL版本是5.7.29. 安装方式是通过官网下载相应的tar.gz压缩包进行安装.这种方式需要 ...
- mysql 快速查询变更记录_MySQL学习笔记(7)—— MySQL 查询/更新数据记录
除非最终检索它们并利用它们来做点事情,否则将记录放入数据库没什么好处.这就是数据记录查询的用途,即帮助取出数据,也是 Python API 与 MySQL 交互的重要部分.SELECT 大概是 SQL ...
最新文章
- IPython和Jupyter关系及区别
- 【数据结构】二叉树的存储和遍历
- Linux安装和管理程序的相关知识点
- Asp.Net就业课之三验证控件
- PHP解压与配置的图片,PHP完善压缩处理类(支持主流的图像类型(jpg、png、gif)...
- AngularJS 详解Directive(指令)机制
- ubuntu下创建软件图标和直接点文件打开
- HTML5 nav元素
- 重启用reboot后起不来_2021年中国“天眼”开放,美媒记者探访后感叹了……
- shardingsphere 分片策略_ShardingSphere系列(二) 分片策略
- 使用弹出窗体修改数据,之后返回值
- dpkg: error: dpkg status database is locked by another process
- iview tree 获取选中子节点的整条数据链
- 我的实用设计模式之关于Policy-based design
- php代码实现微信代扣,html5+如何通过native.js实现APP微信支付代扣签约?
- Python之身份证号码的校验
- 智能语音助手的时代,我们还有这样的一股清流:114!
- 悲伤是一种毒,会上瘾
- 我是一个没有感情的杀手
- 2021年西式面点师(初级)考试题库及西式面点师(初级)考试试题
热门文章
- MOSS2007匿名调查列表使用分页符导致的错误分析
- 汉中市驾驶员理论模拟考试题
- dubbo实现两个系统之间的通信
- 【android自定义控件】TextView详解及自定义一
- ‘,‘ expected.Vetur(1005)
- element-UI级联选择器的使用Cascader
- html+css基础-3-flex,浏览器内核,HTML5新特性
- ES6、7学习笔记(尚硅谷)-8-三点运算符
- js高级学习笔记(b站尚硅谷)-13-作用域链
- java线程执行顺序执行_Java多线程系列四——控制线程执行顺序