使用explain查看,如下

1、首先创建表test,语句如下

create table test(a int,b varchar(10),c varchar(10));

2、在表中的a,b都创建索引,先后顺序是a,b

create index idx_a_b on test(a,b);

3、分别往里面插入三条数据,插入后结果如下:

4、使用explain查询,查看索引使用情况(这里还可以进行多次其他sql语句的查询,查看索引利用情况)

从上面可以看到key_len使用的长度为38(字节),那么总的索引长度是多少呢?

下面继续对表的创建进行查看,查看各个字段的大小

其中:

latin1 = 1 byte = 1 character

uft8 = 3 byte = 1 character

gbk = 2 byte = 1 character

从上面这些可以计算索引的长度:

10*3(varchar 10)+3(标记变长)+1(标记可为null)+其他(不清楚)

组合索引的长度10*3+11已经大于38,所以推论只用到了组合索引的一部分。

5、下面是对explain其他的参数进行说明:

table:

这是表的名字。

type:

连接操作的类型。下面是MySQL文档关于ref连接类型的说明:

“对于每一种与另一个表中记录的组合,MySQL将从当前的表读取所有带有匹配索引值的记录。如果连接操作只使用键的最左前缀,或者如果键不是UNIQUE或PRIMARY KEY类型(换句话说,如果连接操作不能根据键值选择出唯一行),则MySQL使用ref连接类型。如果连接操作所用的键只匹配少量的记录,则ref是一种好的连接类型。”

在本例中,由于索引不是UNIQUE类型,ref是我们能够得到的最好连接类型。

如果EXPLAIN显示连接类型是“ALL”,而且你并不想从表里面选择出大多数记录,那么MySQL的操作效率将非常低,因为它要扫描整个表。你可以加入更多的索引来解决这个问题。预知更多信息,请参见MySQL的手册说明。

本例子中是rang,下面是对type值的解释

Type:告诉我们对表所使用的访问方式,主要包含如下集中类型;

◇ all:全表扫描

◇ const:读常量,且最多只会有一条记录匹配,由于是常量,所以实际上只需要读一次;

◇ eq_ref:最多只会有一条匹配结果,一般是通过主键或者唯一键索引来访问;

◇ fulltext:

◇ index:全索引扫描;

◇ index_merge:查询中同时使用两个(或更多)索引,然后对索引结果进行merge 之后再读

取表数据;

◇ index_subquery:子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个

主键或者唯一索引;

◇ rang:索引范围扫描;

◇ ref:Join 语句中被驱动表索引引用查询;

◇ ref_or_null:与ref 的唯一区别就是在使用索引引用查询之外再增加一个空值的查询;

◇ system:系统表,表中只有一行数据;

◇ unique_subquery:子查询中的返回结果字段组合是主键或者唯一约束;

possible_keys:

可能可以利用的索引的名字。这里的索引名字是创建索引时指定的索引昵称;如果索引没有昵称,则默认显示的是索引中第一个列的名字(在本例中,它是“firstname”)。默认索引名字的含义往往不是很明显。

key:

它显示了MySQL实际使用的索引的名字。如果它为空(或NULL),则MySQL不使用索引。

key_len:

索引中被使用部分的长度,以字节计

ref:

列出是通过常量(const),还是某个表的某个字段(如果是join)来过滤(通过key)

的;

rows:

MySQL所认为的它在找到正确的结果之前必须扫描的记录数。显然,这里最理想的数字就是1。

MySQL索引. ref_mysql中索引利用情况(explain用法)相关推荐

  1. mysql 约束 和索引_Mysql中索引和约束的示例语句

    外键 查询一个表的主键是哪些表的外键 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCE ...

  2. mysql 索引 hash_Mysql中索引类型,B-tree、Hash索引怎么实现的以及其特点?

    一:B-tree索引 相当于金字塔大树分支 例如1000条数据 也就10多行 那么查询也只需要10多次.独立索引只能用一个. 二:hash索引 一对一主键 不利于范围查询 无法利用前缀查询 所谓Has ...

  3. java类索引_java中索引的分类,图片详解

    java的学习是一个漫长而又循环往复不断上升的过程,今天我们再来看一下java索引的分类,并且通过详细的图片解析. 首先,java中的索引主要分为聚簇索引和非聚簇索引. 其中InnoDB主键使用的是聚 ...

  4. laravel mysql注入_laravel中如何利用反射实现依赖注入

    依赖注入 在一个类中经常会依赖于其他的对象,先看一下经典的写法 class Foo { public $bar; public function __construct() { $this->b ...

  5. mysql里collection_foreach中collection的三种用法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...

  6. mysql mybatis cdata_mybatis中<![CDATA[]]>的用法

    目录 一.介绍 二.注意事项 三.使用范例 一.介绍 在mybatis的xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用来 ...

  7. mysql 子查询索引失效_mysql 索引失效的情况

    索引失效的几种情况 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2.对于多列索引,不是使用 ...

  8. mysql5.0中索引的设计和使用_MySQL 5.0中索引的正确设计和使用

    此文章主要向大家描述的是MySQL 5.0中索引的正确设计与具体使用方案的描述, 在一般在数据中,很多朋友对数据库进行优化一般用的是索引.我们通过索引一般可以解决大多数的SQL性能问题. MySQL ...

  9. 【MySQL 面试系列】索引原理

    文章目录 一.索引概述 1.索引的定义 2.索引的作用 3.索引的优缺点 二.索引结构 1.概述 2.索引的演进 1.二叉树 2.B-Tree 3.B+Tree 4.Hash 二.索引分类 1.MyS ...

最新文章

  1. 谷歌提出「卷积+注意力」新模型,超越ResNet最强变体!
  2. apache 局域网访问
  3. python大作业思路_python大作业
  4. 「Apollo」protobuf报错No module named ‘google‘
  5. 从CLR GC到CoreCLR GC看.NET Core为云而生
  6. 详细叙述ajax的详情,ajax的配置详情、ajax的调用解释、ajax的中文乱码和ajax的表单提交(内有实例)...
  7. 苹果cms视频模板源码
  8. 一个初级python web后端开发工程师的面试总结
  9. SPF的最短路径算法
  10. 【怎么用u盘装系统】
  11. linux下img文件 windows查看器,Windows server 2016 设置使用照片查看器查看图片
  12. awl伪装MAC地址进行多线程SYN攻击
  13. 行业缩减他却增加!海尔智家研发投入创新高
  14. Pytorch 实现强化学习策略梯度Reinforce算法
  15. git命令切换分支、更新分支
  16. openwrt对mt7620n的zbt-wa05路由器…
  17. 第十一届蓝桥杯C++国赛C题:阶乘约数(唯一分解)
  18. 深入浅出Python机器学习9——数据预处理、降维、特征提取及聚类
  19. unity3d摄像机
  20. PMP精华集合:学习PMP最关心的10大问题,你必须要知道

热门文章

  1. apache2.2 + php5.2.4 + mysql5.0.x 安装配置
  2. GO语言学习之路11
  3. Angular学习笔记(五) - 自定义表单控件
  4. 做双网卡绑定_______物理机在双网卡的情况下做多IP绑定
  5. 过滤器显示一个路径下特定的文件
  6. matplotlib 柱状图、饼图;直方图、盒图
  7. 用函数指针控制排序的顺序
  8. 【javascript】浮点数运算问题分析及解决方法
  9. WP7备注(11)(页面跳转)
  10. LINQ to SQL语句 收藏系列