索引的分类

  • 普通索引:仅加速查询

  • 唯一索引:加速查询 + 列值唯一(可以有null)

  • 主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个

  • 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

  • 全文索引:对文本的内容进行分词,进行搜索

1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。

2. 一个表中可以有多个唯一性索引,但只能有一个主键。
 
3. 主键列不允许空值,而唯一性索引列允许空值。

4. 索引可以提高查询的速度。

注:主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中

使用索引须知

1.当一个字段拥有索引时,SELECT 该字段时会自动使用索引;

2.当多个字段拥有多个不同的索引时,SELECT 时,只会使用一个索引,DBMS会自动选出key_len最短的索引;

3.当索引包含了查询语句所有要查询的所有数据时,这时将索引称之为覆盖索引,

当索引为覆盖索引时且没有WHERE条件时将无法通过索引检索数据,possible_keys会为空,key为所建索引,extra为Using Index;

explain 详解

id

  当id相同,table栏的table执行顺序为由上到下
  当id不同,id越大,table优先级越高,越先被执行

select_type

  SIMPLE  简单的select查询,查询中没有子查询或union

  PRIMARY  查询中拥有子查询时,最外层查询被称为主查询,即RRIMARY

  SUBQUERY  就是除主查询外的子查询

  DERIVED  执行完子查询时,mysql会将产生一个临时表中,在主查询时会用到,产生临时表的查询叫做derived(通常在有两个及以上的select语句中看到)

  UNION  组合查询,若第二个出现在union之后,称为union,若出现在子查询中,最外层被标记为derived

  UNION RESULT  从union表获取结果的select

type

  system : 表只有一行

  eq_ref : 每次与之前的表合并行都只在该表读取一行,这是除了system,const之外最好的一种, 特点是使用=,而且索引的所有部分都参与join且索引是主键或非空唯一键的索引

  const : 表最多只有一行数据匹配,一般出现在主键和唯一索引

  ref:非唯一性索引等值查询时至少有一条记录相匹配

  range:模糊查询时

  index:全索引扫描时

  all:全表扫描时

possible_keys

  查询时可能会用到的索引,若检索字段中出现索引,将其列出,但不一定被查询实际使用

key

  查询中实际运用的索引

  若索引出现覆盖索引,则该索引只出现在key中

key_len

  表示索引的最大可能字节长度,并非实际长度,在不损失精确度的情况下,越小越好

  精确度与key_len相矛盾

ref

  表示哪些字段或常量在查询中被使用了

extra

  Using filesort:也叫文件排序,在order by不符合索引顺序时,会触发文件排序,这时mysql不会按照表内的索引顺序进行读取,会另起炉灶进行排序,通常这种情况必须优化

  Using temporary:在group by时不符合索引顺序时触发,会产生一个临时表,会严重降低系统性能

  Using index:说明该sql语句使用了覆盖索引,不需要回表查数据

  Using where:说明索引被用来执行索引键值的查找操作,需要回表查找数据

  Using index && Using where : 使用了覆盖索引和where过滤

  Using index condition : 使用了索引还需要回表查数据

索引及explain 详解的更多相关文章

  1. Mysql Explain 详解

    Mysql Explain 详解[强烈推荐] Mysql Explain 详解一.语法explain < table_name >例如: explain select * from t3 ...

  2. MySQL 执行计划explain详解

    MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...

  3. MySQL慢查询优化 EXPLAIN详解

            我们平台过一段时间就会把生产数据库的慢查询导出来分析,要嘛修改写法,要嘛新增索引.以下是一些笔记.总结整理 慢查询排查         show status;  // 查询mysql ...

  4. (转)mysql explain详解

    原文:http://www.cnblogs.com/xuanzhi201111/p/4175635.html http://yutonger.com/18.html http://www.jiansh ...

  5. mysql之explain详解

    mysql之explain详解 mysql之explain各个字段的详细意思: 字段 含义 select_type 分为简单(simple)和复杂 type all : 即全表扫描 index : 按 ...

  6. MySQL单列索引和组合索引(联合索引)的区别详解

    发现index merge局限性,优化器会自动判断是否使用 index merge 优化技术,查询还是需要组合索引[推荐阅读:对mysql使用索引的误解] MySQL单列索引和组合索引(联合索引)的区 ...

  7. MySQL性能优化(四)-- MySQL explain详解

    前言 MySQL中的explain命令显示了mysql如何使用索引来处理select语句以及连接表.explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句. 一.格式 explain + ...

  8. Explain详解

    explain语句用于查看某个查询语句具体使用了什么执行计划 执行输出各列详解 table 每条记录对应一个表的查询,如果是两表连接查询,就会有两条记录,table对应查询表名 id 查询语句可能是单 ...

  9. explain 详解 (转)

    原文:http://blog.csdn.net/zhuxineli/article/details/14455029 explain显示了MySQL如何使用索引来处理select语句以及连接表.可以帮 ...

随机推荐

  1. flask框架(十一): 蓝图

    蓝图用于为应用提供目录划分: 一:上目录结构 二:上代码 <!DOCTYPE html> <html lang="en"> <head> < ...

  2. sh_20_for语法演练

    sh_20_for语法演练 for num in [1, 2, 3]: print(num) if num == 2: break else: # 如果循环体内部使用break退出了循环 # else ...

  3. MapBox

    MapBox的地图API大家用过吗 用作网站或者APP的底图,就不用自己架设地图服务器了 发布自己的地图了 这跟Google Map是一样的道理,类似的还有天地图,高德,百度地图API等等. 属于前端 ...

  4. 网络yum源

    1,进入yum源配置目录cd /etc/yum.repos.d 2,备份系统自带的yum源mv CentOS-Base.repo CentOS-Base.repo.bk下载163网易的yum源:wge ...

  5. 认识weblogic的各个机构

    一.认识Weblogic中各个机构 WebLogic是一个企业级的应用服务器,包括j2ee中的各类应用,是jsp,servlet,ejb的容器.功能强大,为了更方便的管理weblogic的各个功能,从 ...

  6. CSS、Bulma介绍

    文章目录 一.序章 二.CSS 基础 1. CSS 介绍 2. CSS 语法 3. CSS常用元素 1.颜色 2.字体大小 3.宽高 4.盒模型(单独拿出来讲) 5.背景 4.1样式和内容分离 4.2 ...

  7. Python中函数的使用

    函数让代码的编写,阅读,测试和修改都变得更容易,提高代码的复用性,python中使用def关键字定义函数 如下代码在python3.7.3的Genay开发工具中编写测试通过. 一.简单函数定义及调用 ...

  8. Python轻量级开发工具Genay使用

    Genay是一个轻量级的免费,开放源代码的开发工具,支持很多的文件类型,并且支持很多的插件,启动快速.安装包只有十几兆,相关的插件也不大,相比pycharm专业版需要收费,并且社区版的安装包大小有两百 ...

  9. glance-----常用命令

    #查看镜像 openstack image list glance image-list #镜像导出 openstack image save <image_id> --file < ...

  10. backspace 产生乱码的问题

    1.要使用回删键(backspace)时,同时按住ctrl键(一般情况下会有用,如果没用使用下面的方法)   2.设定环境变量   在bash下:$ stty erase ^? 或者把 stty er ...