MySQL使用索引的几种方式

之前的blog有介绍令人迷糊的extra中信息,本文我们重点来看看当执行计划使用索引的时候

extra中几种显示的场景

版本:Mysql 5.6.14

测试表结构如下:

CREATE TABLE `snapshot` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`snap_id` int(11) DEFAULT NULL,

`name` varchar(500) DEFAULT NULL,

`value` int(11) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `snap_id_ix` (`snap_id`)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8

在snap_id上创建了索引,然后插入一些测试数据。

1,snap_id为等于的操作

mysql> explain extended select * from snapshot where snap_id=10;

+----+-------------+----------+------+---------------+------------+---------+-------+------+----------+-------+

| id | select_type | table    | type | possible_keys | key        | key_len | ref   | rows | filtered | Extra |

+----+-------------+----------+------+---------------+------------+---------+-------+------+----------+-------+

|  1 | SIMPLE      | snapshot | ref  | snap_id_ix    | snap_id_ix | 5       | const |    1 |   100.00 | NULL  |

+----+-------------+----------+------+---------------+------------+---------+-------+------+----------+-------+

1 row in set, 1 warning (0.00 sec)

这个虽然使用了索引,但是extra中没有任何信息,显示为空

2,使用索引条件,先扫描索引,然后再通过索引扫描表

mysql>  explain extended select *  from snapshot where snap_id<100;

+----+-------------+----------+-------+---------------+------------+---------+------+------+----------+-----------------------+

| id | select_type | table    | type  | possible_keys | key        | key_len | ref  | rows | filtered | Extra                 |

+----+-------------+----------+-------+---------------+------------+---------+------+------+----------+-----------------------+

|  1 | SIMPLE      | snapshot | range | snap_id_ix    | snap_id_ix | 5       | NULL |    1 |   100.00 | Using index condition |

+----+-------------+----------+-------+---------------+------------+---------+------+------+----------+-----------------------+

1 row in set, 1 warning (0.00 sec)

通过索引条件,然后扫描表数据,extra是Using index condition

3,使用cover index,只查索引中的列,直接从索引中返回数据就可以了

mysql>  explain extended select snap_id from snapshot;

+----+-------------+----------+-------+---------------+------------+---------+------+------+----------+-------------+

| id | select_type | table    | type  | possible_keys | key        | key_len | ref  | rows | filtered | Extra       |

+----+-------------+----------+-------+---------------+------------+---------+------+------+----------+-------------+

|  1 | SIMPLE      | snapshot | index | NULL          | snap_id_ix | 5       | NULL | 6415 |   100.00 | Using index |

+----+-------------+----------+-------+---------------+------------+---------+------+------+----------+-------------+

1 row in set, 1 warning (0.00 sec)

mysql>  explain extended select snap_id from snapshot where snap_id=10;

+----+-------------+----------+------+---------------+------------+---------+-------+------+----------+-------------+

| id | select_type | table    | type | possible_keys | key        | key_len | ref   | rows | filtered | Extra       |

+----+-------------+----------+------+---------------+------------+---------+-------+------+----------+-------------+

|  1 | SIMPLE      | snapshot | ref  | snap_id_ix    | snap_id_ix | 5       | const |    1 |   100.00 | Using index |

+----+-------------+----------+------+---------------+------------+---------+-------+------+----------+-------------+

1 row in set, 1 warning (0.01 sec)

mysql>  explain extended select snap_id from snapshot where snap_id>10;

+----+-------------+----------+-------+---------------+------------+---------+------+------+----------+--------------------------+

| id | select_type | table    | type  | possible_keys | key        | key_len | ref  | rows | filtered | Extra                    |

+----+-------------+----------+-------+---------------+------------+---------+------+------+----------+--------------------------+

|  1 | SIMPLE      | snapshot | range | snap_id_ix    | snap_id_ix | 5       | NULL | 6367 |   100.00 | Using where; Using index |

+----+-------------+----------+-------+---------------+------------+---------+------+------+----------+--------------------------+

1 row in set, 1 warning (0.00 sec)

在extra出现的是Using index提示,表明只使用索引即可,不需要对表进行扫描操作.

4,   接下来我们看连接的操作,假设为snapshot作为连接的内表

mysql> explain

-> select *

-> from t1 join snapshot

-> on (t1.a=snapshot.snap_id)

-> ;

+----+-------------+----------+------+---------------+------------+---------+----------+------+-------+

| id | select_type | table    | type | possible_keys | key        | key_len | ref      | rows | Extra |

+----+-------------+----------+------+---------------+------------+---------+----------+------+-------+

|  1 | SIMPLE      | t1       | ALL  | PRIMARY       | NULL       | NULL    | NULL     |    3 | NULL  |

|  1 | SIMPLE      | snapshot | ref  | snap_id_ix    | snap_id_ix | 5       | db1.t1.a |  200 | NULL  |

+----+-------------+----------+------+---------------+------------+---------+----------+------+-------+

2 rows in set (0.00 sec)

通过执行计划可以看出对snapshot也是索引来访问的,外表传过来的值,在内表很类似于snap_id=XX,所以和第1中的执行

计划很类似.除ref之外,一个是来自于常量(const),而本例中是来自表t1的索引db.t1.a.

oracle 5种索引方式,MySQL使用索引的几种方式相关推荐

  1. mysql安装文件格式_一、安装方式       MySQL安装文件分为两种,一种是MSI格式的,一种是ZIP格式的。下面来看看这两种方式:       MSI格式的可以直接点击安...

    一.安装方式 MySQL安装文件分为两种,一种是MSI格式的,一种是ZIP格式的.下面来看看这两种方式: MSI格式的可以直接点击安装,按照它给出的安装提示进行安装,Windows操作系统下一般MyS ...

  2. 什么是索引?Mysql目前主要的几种索引类型 和 引擎区别?

    一.索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的My ...

  3. mysql 索引类型 ref_什么是索引?Mysql目前主要的几种索引类型

    一.索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的My ...

  4. MySQL索引,MySQL中索引的限制?

    MySQL中索引的限制: 1.MyISAM存储引擎引键的长度综合不能超过1000字节: 2.BLOB和TEXT类型的列只能创建前缀索引: 3.MySQL目前不支持函数索引: 4.使用!= 或者< ...

  5. 【mysql 索引】mysql 添加索引

    主要内容: 1.什么是索引 2.添加索引sql 3.索引所用的算法 4.补充下概念 5.索引的缺点 6.经典案例 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树 ...

  6. SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引

    我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升,但我 ...

  7. 什么是mysql的索引_什么是索引?mysql目前索引有哪些?

    1.索引由数据库中一列或多列组合而成,其作用是提高对表中数据的查询速度. 索引的优点是可以提高检索数据的速度 索引的缺点是创建和维护索引需要耗费时间. 索引可以提高查询速度,会减慢写入速度. 2.索引 ...

  8. mysql 复合索引 in,MySQL复合索引比主键索引还快,为什么?

    存储引擎:innodb 题目如下: create table t( id primary, ver int, content varchar(3000), intro varchar(3000) ) ...

  9. mysql 索引 fulltext,MySQL FULLTEXT索引问题

    I'm trying to create a FULLTEXT index on an attribute of a table. Mysql returns ERROR 1214: The used ...

最新文章

  1. 程序人生系列谈:《程序员》带给我的启发故事
  2. ROS知识【13】:ubuntu下安装eclipse-CDT【非installor】
  3. ue4怎么导出fbx文件_【教程】Houdini Engine在UE4中的基本使用(一)
  4. Sentinel 规则持久化到 apollo 配置中心
  5. 洛谷 P2286 [HNOI2004]宠物收养场
  6. 【NOIP2017】【Luogu3954】成绩(模拟)
  7. 身在旋涡中的百度外卖,还能否找到接盘者?
  8. javaweb基于SSM酒店入住管理系统设计与实现(含毕业论文、程序设计及数据库文件)
  9. MIUI 13 去除输入法广告
  10. vue2 动态添加响应式数据
  11. Chrome 优化指南
  12. 计算机科班比其他专业有多少优势呢?
  13. 扎克伯格的智能管家计划 需面临哪些挑战
  14. 转录组分析---Hisat2+StringTie+Ballgown使用
  15. python数字转字符串_字符串转换与格式化
  16. 给服务器写一个简单的断网重连shell脚本
  17. 日期选择器(年、季、月、周)展示
  18. 【Proteus仿真】步进电机转速数码管显示
  19. 差分信号、共模信号、单端信号异同 (2022.2.14)
  20. pyinstaller使用多帧ICO图标

热门文章

  1. best introduction to camera calibration
  2. 使用FtpWebRequest 类操作(上传、下载和删除)FTP上的XML文件
  3. C#中的代理(Delegate)
  4. 十分钟玩转 jQuery、实例大全
  5. 一个类型初始值设定项引发异常
  6. 解决IDEA2020控制台乱码的方法(亲测)
  7. 一个关于php使用pdo方式进行数据库连接和处理的类
  8. Vue报错bash: vue: command not found或者vue ui没有反应:官方修改成新的命令了
  9. PHP的魔术常量魔术方法超全局变量
  10. PHP的xdebug五个按钮的说明