• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 使用 EXPLAIN 关键字 检查SQL语句效率

使用 EXPLAIN 关键字 检查SQL语句效率

作者:a1165117473的专栏 字体:[增加 减小] 来源:互联网 时间:2017-08-07

a1165117473的专栏通过本文主要向大家介绍了sql explain,sql中explain,explain sql优化方法,sql server explain,explain等相关知识,希望本文的分享对您有所帮助
explain详细说明

通过explain可以知道MySQL是如何处理语句,分析出查询或是表结构的性能瓶颈。通过expalin可以得到:

1. 表的读取顺序
2.表的读取操作的操作类型
3.哪些索引可以使用
4. 哪些索引被实际使用
5.表之间的引用
6.每张表有多少行被优化器查询

通过explain 【sql语句】能够查看sql语句的各项性能,下面了解下各列名代表的含义:

Id:MySQL QueryOptimizer 选定的执行计划中查询的序列号。表示查询中执行 select 子句或操作表的顺序,

id 值越大优先级越高,越先被执行。id 相同,执行顺序由上至下。
Select_type一共有9中类型,只介绍常用的4种:
SIMPLE: 简单的 select 查询,不使用 union 及子查询
PRIMARY: 最外层的 select 查询
UNION: UNION 中的第二个或随后的 select 查询,不依赖于外部查询的结果集
DERIVED: 用于 from 子句里有子查询的情况。 mysql会递归执行这些子查询, 把结果放在临时表里。
Table:输出行所引用的表
Type:从有到差的顺序如下:
System-->const-->eq_ref-->ref-->ref_or_null-->index_merge-->unique_subquery-->index_subquery-->range-->index-->all.
各自的含义如下:
system: 表仅有一行(=系统表)。这是 const 连接类型的一个特例。
const: const 用于用常数值比较 PRIMARY KEY 时。当 查询的表仅有一行时,使用 System。
eq_ref: 从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用
ref: 连接不能基于关键字选择单个行,可能查找 到多个符合条件的行。 叫做 ref 是因为索引要 跟某个参考值相比较。

这个参考值或者是一 个常数,或者是来自一个表里的多表查询的 结果值。
ref_or_null: 如同 ref, 但是 MySQL 必须在初次查找的结果 里找出 null 条目,然后进行二次查找。
index_merge: 说明索引合并优化被使用了。
unique_subquery: 在某些 IN 查询中使用此种类型,而不是常规的 ref:valueIN (SELECT primary_key FROM single_table WHERE some_expr)
index_subquery: 在 某 些 IN 查 询 中 使 用 此 种 类 型 , 与 unique_subquery 类似,但是查询的是非唯一 性索引
range: 只检索给定范围的行,使用一个索引来选择 行。key 列显示使用了哪个索引。

当使用=、 <>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比较关键字列时,可 以使用 range。
index: 全表扫描,只是扫描表的时候按照索引次序 进行而不是行。主要优点就是避免了排序, 但是开销仍然非常大。
all: 最坏的情况,从头到尾全表扫描。
possible_keys : 指出能在该表中使用哪些索引有助于 查询。如果为空,说明没有可用的索引。
key:实际从 possible_key 选择使用的索引。 如果为 NULL,则没有使用索引。很少的情况 下,MYSQL 会选择优化不足的索引。这种情 况下,可以在 SELECT 语句中使用 USE INDEX (indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制 MYSQL 忽略索引
key_len: 使用的索引的长度。在不损失精确性的情况 下,长度越短越好。
ref: 显示索引的哪一列被使用了
rows: 认为必须检查的用来返回请求数据的行数
extra中出现以下 2 项意味着 根本不能使用索引,效率会受到重大影响。应尽可能对此进行优化。

从上述对列名进行介绍,你对性能检测结果有一个大概的了解了吧.其中type为all的地方,都是需要进行优化的地方.

在对sql语句的性能检测最少也应该到达range,这样才可以忍受.

目前我的技术水平和项目要求,主要考虑type这列的优化。既然检测出来的结果有all ,那么就需要优化,具体怎么优化,请看我下期博客。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MySql实现跨表查询的方法详解
  • MySQL分表实现上百万上千万记录分布存储的批量查询设计模式详解
  • 基于mysql数据库的密码问题详解
  • MySQL查询优化之explain的深入解析
  • 基于mysql时间处理函数的应用详解
  • 详解MYSQL的备份还原(PHP实现)
  • MySQL笔记之连接查询详解
  • MySQL笔记之数据类型详解
  • MySQL笔记之数学函数详解
  • mysql中explain用法详解

相关文章

  • 2018-12-05MySQL数据类型和存储机制详解
  • 2018-12-05mysql学习之权限管理图文代码实例
  • 2017-05-11mysql 无法连接问题的定位和修复过程分享
  • 2017-05-11Mysql建表与索引使用规范详解
  • 2018-12-05关于MySQL5.7 mysql command line client使用命令详解
  • 2018-12-05sqlserver 禁用触发器和启用触发器的语句
  • 2017-05-11FROM_UNIXTIME 格式化MYSQL时间戳函数
  • 2018-12-05sql 查询结果合并union all用法_数据库技巧
  • 2018-12-05MySQL绿色版设置编码以及1067错误详解
  • 2017-05-11mysql like查询字符串示例语句

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql运维-lower_case_table_names
    • mytop 使用介绍 mysql实时监控工具
    • windows 7安装ORACLE 10g客户端的方法分享
    • 在SQL SERVER下计算两点经纬度之间的距离
    • 解析mysql中如何获得数据库的大小
    • mysql数据库在Centos7下无法远程连接的原因以及解决详解
    • 详解Oracle查询中OVER (PARTITION BY ..)用法
    • C#如何连接Mysql数据库?详解报错异常和增删改查
    • 从4个方面实战Oracle的密码操作
    • Mysql数据库在Centos系统下如何被彻底删除的步骤介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有