索引及explain 详解
索引的分类:
普通索引:仅加速查询
唯一索引:加速查询 + 列值唯一(可以有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 详解的更多相关文章
- Mysql Explain 详解
Mysql Explain 详解[强烈推荐] Mysql Explain 详解一.语法explain < table_name >例如: explain select * from t3 ...
- MySQL 执行计划explain详解
MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...
- MySQL慢查询优化 EXPLAIN详解
我们平台过一段时间就会把生产数据库的慢查询导出来分析,要嘛修改写法,要嘛新增索引.以下是一些笔记.总结整理 慢查询排查 show status; // 查询mysql ...
- (转)mysql explain详解
原文:http://www.cnblogs.com/xuanzhi201111/p/4175635.html http://yutonger.com/18.html http://www.jiansh ...
- mysql之explain详解
mysql之explain详解 mysql之explain各个字段的详细意思: 字段 含义 select_type 分为简单(simple)和复杂 type all : 即全表扫描 index : 按 ...
- MySQL单列索引和组合索引(联合索引)的区别详解
发现index merge局限性,优化器会自动判断是否使用 index merge 优化技术,查询还是需要组合索引[推荐阅读:对mysql使用索引的误解] MySQL单列索引和组合索引(联合索引)的区 ...
- MySQL性能优化(四)-- MySQL explain详解
前言 MySQL中的explain命令显示了mysql如何使用索引来处理select语句以及连接表.explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句. 一.格式 explain + ...
- Explain详解
explain语句用于查看某个查询语句具体使用了什么执行计划 执行输出各列详解 table 每条记录对应一个表的查询,如果是两表连接查询,就会有两条记录,table对应查询表名 id 查询语句可能是单 ...
- explain 详解 (转)
原文:http://blog.csdn.net/zhuxineli/article/details/14455029 explain显示了MySQL如何使用索引来处理select语句以及连接表.可以帮 ...
随机推荐
- CodeForces 1197 D Yet Another Subarray Problem
题面 不得不说CF还是很擅长出这种让人第一眼看摸不着头脑然后再想想就发现是个SB题的题的hhh(请自行断句). 设sum[]为前缀和数组,那么区间 [l,r]的价值为 sum[r] - sum[l-1 ...
- 包管理神器-pipenv
一:前言 介绍一个包管理神器-pipenv,这个工具可以让我们在写代码.创建Python运行环境.package依赖关系以及项目合作的时候更有效率. 在pycon2018上,Kenneth Reitz ...
- Catch That Cow (POJ - 3278)(简单BFS)
转载请注明出处:https://blog.csdn.net/Mercury_Lc/article/details/82693928作者:Mercury_Lc 题目链接 题解:给你x.y,x可以加1.减 ...
- Backen-Development record 1
单例模式 在应用这个模式时,单例对象的类必须保证只有一个实例存在. 服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理. __new__实现 用装饰器实现单例 ...
- State Threads之编程注意事项
原文: Programming Notes 1. 移植 State Thread 库可移植到大多数类 UNIX 平台上,但是该库有几个部分需要依赖于平台特性,以下列出了这些部分: 线程上下文初始化. ...
- 踩坑:VScode 集成 eslint 插件
本文以 Vue 官方脚手架 Vue-cli 为例: 1. 创建 Vue 项目 注意:Vue-cli 默认给出了 eslint 配置,一路回车即可.最后在安装模块的时候,选择直接安装!我用淘宝镜像安装时 ...
- oracle中监听程序当前无法识别连接描述符中请求服务 的解决方法
早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误,帮其解决后,发现很多人遇到过这样的问题,因此写着这里. ...
- 黑马lavarel教程---12、lavarel验证码
黑马lavarel教程---12.lavarel验证码 一.总结 一句话总结: 用插件的时候仔细看插件的版本要求 1.lavarel安装验证码插件的时候,如果(可选)需要定义自己的配置,则需要生成配置 ...
- legend3---lavarel多对多模型操作实例
legend3---lavarel多对多模型操作实例 一.总结 一句话总结: 在多对多模型中,增加关系表的数据 需要 弄一个和关系表一对多的模型关系 1.在lavarel关系模型中,课程和标签表是多对 ...
- Ubuntu14.04升级cmake版本的方法
在Ubuntu14.04用以下命令默认安装的cmake版本为2.8.x,有时我们需要更高版本的cmake,所以需要升级. $ sudo apt-get install cmake 可通过以下命令查询c ...