explain是用来分析sql语句,帮助优化的一个命令。

explain的语法如下:

explain [extended] select … from … where …

如果使用了extended,那么在执行完explain语句后,可以使用show warnings语句查询相应的优化信息。

比如我们执行  select uid from user where uname=’scofield’ order by uid  执行结果会有

+—-+————-+——-+——-+——————-+———+———+——-+——+——-+
| id | select_type | table | type  | possible_keys     | key     | key_len | ref   | rows | Extra |
+—-+————-+——-+——-+——————-+———+———+——-+——+——-+

这些东西。

其中 table 表示是哪个表的数据。

type比较重要。表示链接的类型。链接类型由好到坏的,依次是    system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般情况,至少要达到 range 级别,最好是 ref 级别。否则可能会有性能问题。

possible_keys 是指可以应用到该表的索引,如果为NULL则没有。

key 是指用到的索引。

key_len 是索引的长度,在不影响查询精度的情况下,值越小越好。

ref 是指索引的那一列被使用了。一般会是个常数。

rows 是指有多少行。

extra 是指额外的信息。也是比较重要的。如果值为 distinct ,说明mysql 找到了域行联合匹配的行,就不再查找了。

如果值为 not exits  :  mysql优化了 left join ,一旦找到了 left join 匹配的行,便不再进行搜索了。

如果值为 rang checked for each :  没有找到理想的索引。

如果为 using filesort ,则需要改进sql了。这说明 mysql执行 需要 文件排序。这是比较影响效率的。

如果为  using  temporary , 这是使用了 临时表。 这种情况也比较影响效率,sql需要改进。或者从应用层进行改进。

如果为 where used 说明使用了where语句。如果 type为 all 或者 index ,一般会出现这样的结果。这样的问题,一般是查询需要改进。

在一般稍大的系统中,基本尽可能的减少 join ,子查询 等等。mysql就使用最简单的查询,这样效率最高。至于 join 等,可以放在应用层去解决。

MYSQL中的EXPLAN是用来解析sql语句的相关推荐

  1. 在mysql中更新数据sql语句怎么写_在MySQL中,更新数据库表记录的SQL语句,包括______语句...

    在MySQL中,更新数据库表记录的SQL语句,包括______语句 答:insert replace update delete 在域F中,设其特征为2,对于任意a,b∈F,则(a+b)2 等于多少 ...

  2. MySQL中非常好用的函数或sql语句(14种)

    1.group_concat 在我们平常的工作中,使用group by进行分组的场景,是非常多的. 比如想统计出用户表中,名称不同的用户的具体名称有哪些? 具体sql如下: select name f ...

  3. mysql中日期怎样求差_在Sql语句中怎样计算出两个日期的差值

    展开全部 sql语句中计算两个日期的差值用32313133353236313431303231363533e4b893e5b19e31333365643662datediff函数. 工具:sqlser ...

  4. Java中如何解析SQL语句、格式化SQL语句、生成SQL语句?

    昨天在群里看到有小伙伴问,Java里如何解析SQL语句然后格式化SQL,是否有现成类库可以使用? 之前TJ没有做过这类需求,所以去研究了一下,并找到了一个不过的解决方案,今天推荐给大家,如果您正要做类 ...

  5. mysql按某个条件升序_问题描述大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例,下同):SELECT * FROM `MyTable` WHERE...

    问题描述 大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例,下同): SELECT * FROM `MyTable` WHERE `id` IN (1, 7, 3, 5) ...

  6. mysql中常用的三种插入数据的语句

    mysql中常用的三种插入数据的语句: insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错: replace into表示插入替换数据,需求表中有Prim ...

  7. MySQL的基础架构以及一条查询sql语句的执行流程

    详细介绍了Mysql的基础架构以及一条查询sql的执行流程. 如果不想作为一个只能简单的写写sql工程师,而是想要深入的学习MySQL,那么我们有必要首先从宏观的角度来了解MySQL的整体架构,只有把 ...

  8. Java使用Druid解析SQL语句

    依赖 名称:com.alibaba.druid 版本:1.1.16 SQL语句解析 以SQLServer为例,解析插入语句和更新语句,并提取对应的数据 /*** @Author li.dongquan ...

  9. php sql取数据生成数组中,php中实现数组生成要执行的sql语句

    本篇文章主要介绍php中实现数组生成要执行的sql语句,感兴趣的朋友参考下,希望对大家有所帮助. 会不会碰到这样一种情况呢?每次获取数据将数据和历史版本都有一定的差别,然而用ThinkPHP的addA ...

最新文章

  1. 概率密度与概率的关系
  2. html页面关闭前提示信息,【转】表单提交及关闭当前页面并刷新数据
  3. C1之路 | 训练任务01-进制与信息编码
  4. Shiro集成Web时的url匹配规则
  5. Spring Bean的属性注入
  6. kafka概念使用简介注意点
  7. nodejs代码细节效率对比
  8. networkx 标签_networkx绘制BA无标度网络
  9. check corners_免费下载:将Mac样式的Hot Corners添加到Windows 10
  10. python与办公自动化专业就业方向_Python最好的几大就业方向与岗位技能要求【行业风向】...
  11. @requestbody和@requestparam作用
  12. Stanley-系列三
  13. Python精通-Python字符串格式化操作
  14. 计算机专业在沈阳有什么发展,985 计算机专业在全国 TOP10 在沈阳
  15. 懒人修仙传ce修改方法_专访|《凡人修仙传》原著作者忘语:“韩老魔”原型是我...
  16. Vue.js05:vue内联样式
  17. 测试用例(测试大纲法)
  18. iterm2新技能-用不同的颜色创建新标签
  19. python 交互redis 的ZADD方法异常: AttributeError: ‘int‘ object has no attribute ‘items‘
  20. WinEdt的bib参考文献管理教程

热门文章

  1. android opengl旋转,Android openGl学习笔记二,gl的旋转、位移、放大缩小
  2. Python:7-4 找出从现在开始满足条件的1个最近的日期 (15分)
  3. python数据存储和查询代码_【Python分享】如何便捷地存储、查询数据
  4. codevs 搜索题汇总(黄金级)
  5. Evil.js源码解读
  6. Audition 入门系列(合集)
  7. 斗鱼、饿了么大数据平台架构
  8. 东财VS同花顺!互联网金融争霸史
  9. HTML5移动Web开发实战 PDF扫描版​
  10. 《java从入门到放弃》_JAVA从入门到放弃(四)