一、mysql的索引

  索引是帮助mysql高效获取数据的数据结构。本质:索引是数据结构

  1:索引分类

    普通索引:一个索引只包含单个列,一个表可以有多个单列索引。

    唯一索引:索引列的值必须唯一 ,但允许有空值。

    复合索引:一个索引包含多个列。

    聚集索引:并不是一种单独的索引类型,而是一种数据存储方式。innodb磁盘存储,.ibd数据和索引放在一个文件夹下。

    非聚集索引:不是聚集索引的,就是非聚集索引。

  2:语法

    查看索引        show index from table;

    创建索引  

      create [unique] index indexname on table(columnname(length));

      alter table 表名 add [unique] index [indexname] on (columnname(length));

    删除索引  drop index [indexName] on table;

  3:适合建索引

    某一列相对来说唯一

    经常用来查询显示的列

    经常用来关联的列 where 条件中用到的列,以及join on 用到的列

二、mysql的执行计划

  使用explan关键字可以知道mysql是如何处理SQL语句的。

  id:相同,都不相同,不全部相同。

    相同:获取select的执行顺序。执行顺序由上到下。

    都不相同:如果是子查询,id序号会递增,id值越大优先级越高,越先被执行。

    不全部相同:id相同的认为一组,从上往下顺序执行。在所有组中,id值越大,优先级越高,越先被执行。

  select_type:查询的类型

    simple:简单的SQL语句,不包含union或者子查询。

    primary:查询中包含任何的子查询,最外层查询被标记。

    subquery:在select和where中,查询的任何子查询。

    derived:在from列表中包含子查询会被标记为derived,mysql会递归执行这些子查询,把结果放到临时表。

    union:若第二个select出现在union之后,则标记为UNION;若UNION包含在from子句的子查询中,外层select将被标记为derived。

    union result:从union表获取结果的select。

  table:查询来自那张表

  type:访问的类型,重要的一个指标,结果从最好到最坏。

    system》const》eq_ref>ref>range>index>all,最好达到ref或者range

    system:表中只有一条记录(等于系统表),这是const类型的特例,平时不会出现,这个可以忽略不计。

    const:表示通过索引一次就找到了。用于primary或unique索引。因为只匹配一行数据。

    eq_ref:唯一索引扫描,对于每个索引建,表中只有一条记录匹配。常见于主键或唯一索引扫描。 

    ref:非唯一索引扫描,返回匹配某个单独值的所有行。

    rang:只检索给定范围内的行,使用一个索引来选择行。key列显示使用那个索引,一般就是在你的where语句中出现between、<、>、in查询中。

    index:当查询的结果全为索引列的时候。也是全表扫描的一种。只不过扫描的全部索引。

    all:全表扫描。

    注:当出现index和all的时候,就应该去优化SQL语句。

  key:实际所用的索引。如果为null,则没有使用索引。

  possible_key:可能用到的key。possible_key有数据,但是不一定会使用key。key有数据,但是不一定会使用possible_key。这两者比一定都同时出现。

  key_len:表示索引使用的字节数,通过该列查询使用索引的长度。在不损失精确性的情况下,长度越短越好。

  ref:显示索引的哪一列被使用了,如果可能得话,是一个常数。

  rows:根据表的以及索引选用的情况,大致估算出需要读取的行数。扫描的行数越少越好。

  extra:包含不适合在其他列中显示,但重要的额外信息。

mysql的索引和执行计划的更多相关文章

  1. python/MySQL(索引、执行计划、BDA、分页)

    ---恢复内容开始--- python/MySQL(索引.执行计划.BDA.分页) MySQL索引: 所谓索引的就是具有(约束和加速查找的一种方式)   创建索引的缺点是对数据进行(修改.更新.删除) ...

  2. MySQL for OPS 03:索引和执行计划

    写在前面的话 啥是索引?以一本书为例,如果想要找到某一指定章节的某一小节,书薄还好,如果书厚,可能就会找的头皮发麻.于是便出现了目录,让用户更容易查找到自己所需要的东西.索引就类似一张表的目录.其存在 ...

  3. MySQL学习系列2--MySQL执行计划分析EXPLAIN

    原文:MySQL学习系列2--MySQL执行计划分析EXPLAIN 1.Explain语法 EXPLAIN SELECT …… 变体:   EXPLAIN EXTENDED SELECT …… 将执行 ...

  4. MYSQL与TiDB的执行计划

    前言 这里采用了tpc-h一个数据库的数据量来进行查询计划的对比.并借助tpc-h中的22条查询语句进行执行计划分析. mysql采用的是标准安装,TiDB采用的是单机测试版,这里的性能结果不能说明其 ...

  5. MySQL统计信息以及执行计划预估方式初探

    数据库中的统计信息在不同(精确)程度上描述了表中数据的分布情况,执行计划通过统计信息获取符合查询条件的数据大小(行数),来指导执行计划的生成.在以Oracle和SQLServer为代表的商业数据库,和 ...

  6. 第九课——MySQL优化之索引和执行计划

    一.创建索引需要关注什么? 1.关注基数列唯一键的数量: 比如性别,该列只有男女之分,所以性别列基数是2: 2.关注选择性列唯一键与行数的比值,这个比值范围在0~1之前,值越小越好: 其实,选择性列唯 ...

  7. 【mysql】mysql 调优之 ——执行计划 explain

    1.what is explain(explain 是个什么东东) explain(解释),在 Mysql 中 作为一个关键词,用来解释 Mysql 是如何执行语句,可以连接 select .dele ...

  8. MySQL — 优化之explain执行计划详解(转)

    EXPLAIN简介 EXPLAIN 命令是查看查询优化器如何决定执行查询的主要方法,使用EXPLAIN,只需要在查询中的SELECT关键字之前增加EXPLAIN这个词即可,MYSQL会在查询上设置一个 ...

  9. MySQL(四)执行计划

    转载自:Oo若离oO,原文链接 在MySQL中使用explain查询SQL的执行计划 目录 一.什么是执行计划 二.如何分析执行计划 一.什么是执行计划 要对执行计划有个比较好的理解,需要先对MySQ ...

随机推荐

  1. 如何在Ubuntu上安装gcc-6.3

    装显卡驱动推荐 gcc 6.3 版本,其实linux上多个版本的gcc是可以共存的,需要的的时候切换就好,参加之前的博客 https://www.cnblogs.com/jins-note/p/951 ...

  2. MySQL 备份恢复(导入导出)单个 innodb表

    MySQL 备份恢复单个innodb表呢,对于这种恢复我们我们很多朋友都不怎么了解了,下面一起来看一篇关于MySQL 备份恢复单个innodb表的教程 在实际环境中,时不时需要备份恢复单个或多个表(注 ...

  3. arcgis for js/flex/sl 该选哪一个?

    arcgis server开发webgis 在客户端有3种选择:js.flex.sl 他们除了开发arcgis外,本身还有一些常用的领域 js:在传统网站中很常用 flex:游戏.视频播放.动画特效 ...

  4. ArcGIS最权威、最专业的技术分享网站:积思园(www.iarcgis.com)

    你对iArcGIS.com说点什么 为什么会有该网站的产生 在这个所谓的“大数据”的时代,每个人都深陷于海量信息无法自拔,因为过多碎片化的数据只会让自己的思维更加迷离,快餐式的阅读只会让自己变得虚胖. ...

  5. 使用 js 实现文本过多时隐藏部分文本

    使用 js 实现文本过多时隐藏部分文本 情景描述: 有时候我们需要显示部分文字,就像 QQ 空间这样,先显示部分文字,加一个[查看全文],让用户选择是否查看全部 解决方法: 第一步:在一个 id 为 ...

  6. .net core系列之《将.net core应用部署到Ubuntu》

    1.首先准备一个演示项目. 2.然后将这个项目用FileZilla工具上传到Ubuntu中. 3.进入目标文件,接下来有两种方法来部署项目 a.用dotnet run命令 root@hhz-virtu ...

  7. 最近选购MP3而有感便携追求音质的一些心得

    之前的创新小石头MP3的耳机接口松动了.考虑到它已经服役了4年了.所以我准备重新买一个.而小石头出色的外放,我决定让给宝宝当玩具. 选购心得MP3的时候,原来的主导思想,是在低价位的里面考虑一台国际品 ...

  8. Java学习---Collection的学习

    Collection基本方法的使用 package com.huawei.ftl; import java.io.File; import java.io.FileInputStream; impor ...

  9. 内置的HTTP服务器【Modern PHP】

    目录 启动服务器 配置服务器 路由器脚本 判断是否为内置的服务器 PHP5.4.0起,PHP内置了Web服务器.对本地开发是个极好的工具,便捷,无需安装WAMP.XAMP或大新那个web服务器,就能在 ...

  10. rsync- sersync -inotify

    Rsync简介 Rsync是一款优秀的.快速的.多功能的本地或远程数据镜像同步备份工具.适用于unix/linux/windows等多种平台 从软件的名称Rsync(Remote Rynhroniza ...