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学习笔记(六):扫描范围相关推荐

  1. mysql 查找相似数据_MySQL学习笔记之索引

    索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...

  2. mysql 加号的作用_MySQL学习笔记(一)

    MySQL学习笔记(一) 作者:易成勇 案例来源:AI技术前线 MySQL常用命令 1.查看当前所有数据库 show databases; 2.打开指定的库 use 库名 3.查看当前库的所有表 sh ...

  3. mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法

    本文实例讲述了MySQL学习笔记之数据的增.删.改实现方法.分享给大家供大家参考,具体如下: 一.增加数据 插入代码格式: insert into 表明 [列名-] values (值-) creat ...

  4. mysql传小马_Mysql 学习笔记

    1.关系型数据库 关系:由行和列组成的二维表 表:至少要有列,可以没有行. 列:是实体的属性. 数据模型:层次模型.网状模型.关系模型.非关系模型. DBMS:DataBase Mangenent S ...

  5. mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  6. mysql 去重后拼接_mysql学习笔记(三)—— 查询select

    本节主要介绍查询语句(select),包括基础查询.条件查询.模糊查询,以及一些常用函数包括:去重函数distinct.字符拼接函数concat.null判断函数ifnull. 内容都是自己学习后从S ...

  7. linux将mysql的错误连接数_Mysql学习笔记(十二) 并发参数调节

    mysql是多线程结构,包括后台线程和客户服务线程,多线程可以有效利用服务器资源,提高数据库的并发性能.在mysql的并发能力上,主要有有下列参数界定.分别为max_connections,back_ ...

  8. mysql悲观锁 更新_MySQL学习笔记(四)悲观锁 for update

    恼骚 最近在搞并发的问题,订单的异步通知和主动查询会存在并发的问题,用到了Mysql数据库的 for update 锁 在TP5直接通过lock(true),用于数据库的锁机制 Db::name('p ...

  9. mysql 3.5安装_MYSQL学习笔记-06-搭建数据库

    文章内容输出来源:拉勾教育Java高薪训练营 1. 安装说明 基于Ubuntu Linux系统安装,MySQL版本是5.7.29. 安装方式是通过官网下载相应的tar.gz压缩包进行安装.这种方式需要 ...

  10. mysql 快速查询变更记录_MySQL学习笔记(7)—— MySQL 查询/更新数据记录

    除非最终检索它们并利用它们来做点事情,否则将记录放入数据库没什么好处.这就是数据记录查询的用途,即帮助取出数据,也是 Python API 与 MySQL 交互的重要部分.SELECT 大概是 SQL ...

最新文章

  1. IPython和Jupyter关系及区别
  2. 【数据结构】二叉树的存储和遍历
  3. Linux安装和管理程序的相关知识点
  4. Asp.Net就业课之三验证控件
  5. PHP解压与配置的图片,PHP完善压缩处理类(支持主流的图像类型(jpg、png、gif)...
  6. AngularJS 详解Directive(指令)机制
  7. ubuntu下创建软件图标和直接点文件打开
  8. HTML5 nav元素
  9. 重启用reboot后起不来_2021年中国“天眼”开放,美媒记者探访后感叹了……
  10. shardingsphere 分片策略_ShardingSphere系列(二) 分片策略
  11. 使用弹出窗体修改数据,之后返回值
  12. dpkg: error: dpkg status database is locked by another process
  13. iview tree 获取选中子节点的整条数据链
  14. 我的实用设计模式之关于Policy-based design
  15. php代码实现微信代扣,html5+如何通过native.js实现APP微信支付代扣签约?
  16. Python之身份证号码的校验
  17. 智能语音助手的时代,我们还有这样的一股清流:114!
  18. 悲伤是一种毒,会上瘾
  19. 我是一个没有感情的杀手
  20. 2021年西式面点师(初级)考试题库及西式面点师(初级)考试试题

热门文章

  1. MOSS2007匿名调查列表使用分页符导致的错误分析
  2. 汉中市驾驶员理论模拟考试题
  3. dubbo实现两个系统之间的通信
  4. 【android自定义控件】TextView详解及自定义一
  5. ‘,‘ expected.Vetur(1005)
  6. element-UI级联选择器的使用Cascader
  7. html+css基础-3-flex,浏览器内核,HTML5新特性
  8. ES6、7学习笔记(尚硅谷)-8-三点运算符
  9. js高级学习笔记(b站尚硅谷)-13-作用域链
  10. java线程执行顺序执行_Java多线程系列四——控制线程执行顺序