mysql的explain执行计划_MySQL之Explain(执行计划)
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库
1.explain(查看执行计划):使用Explain关键字可以模拟优化器执行SQL查询语句,从而知道MySql是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。
(1.)能干嘛?
(2.)怎么玩
1.Explain+SQL语句
2.执行计划包含的信息
2.各名词解释
(1)id
一.第一种情况
二.第二种情况
三.第三种情况
(2).select_type
一.有哪些
simple: 简单的select查询,查询中不包括子查询或者union
primary: 查询中若包含任何复杂的子部分,最外层查询则被标记为
subQuery: 在select或where列表中包括子查询
derived: 在from列表中包括的子查询被标记为derived。mysql会递归执行这些子查询,把结果放在临时表里。
union: 若第二个select出现在union之后,则被标记为union。若union包含在from子句的子查询中,外层select将被标记为derived
union result: 从union表中获取的结果select。
查询的类型,主要用于区别普通查询,联合查询,子查询等的复杂查询
(3).type:访问数据类型
一.有哪些值
从最好到最差依次是:
System>const>eq_ref>ref>range>index>All
一般来说,的保证查询至少达到range级别,最好能达到ref
type类型
说明
All
最坏的情况,从头到尾全表扫描
index
和全表扫描一样。只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序, 但是开销仍然非常大。如在Extra列看到Using index,说明正在使用覆盖索引,只扫描索引的数据,它比按索引次序全表扫描的开销要小很多
range
范围扫描,一个有限制的索引扫描。key 列显示使用了哪个索引。当使用=、 <>、>、>=、、BETWEEN 或者 IN 操作符,用常量比较关键字列时,可以使用 range
ref
一种索引访问,它返回所有匹配某个单个值的行。此类索引访问只有当使用非唯一性索引或唯一性索引非唯一性前缀时才会发生
eq_ref
最多只返回一条符合条件的记录。使用唯一性索引或主键查找时会发生 (高效)
const/system
当主键放入where子句时,mysql把这个查询转为一个常量(高效)
null
意味说mysql能在优化阶段分解查询语句,在执行阶段甚至用不到访问表或索引(高效)
(4)possible_key
一:显示可能应用在这张表中的索引,,一个或多个,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用
(5)key
一.实际使用的索引,如果为null,则没有使用索引
二.查询中若使用了覆盖索引,则该索引仅出现在key列表中
(6)key_len
一.表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,在不损失精度的情况下,长度越短越好。
二.key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出来的。
(7)ref
一.显示索引的那一列被使用了,如果使用的话,是一个常数,那些列或常量被用于查找索引列的值
(8)rows
一. 根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数
(9).Extra
额外信息。如using index,using filesort,using where 等
mysql的explain执行计划_MySQL之Explain(执行计划)相关推荐
- mysql中的执行计划_MySQL中的执行计划explain详解
一.用法及定义: explain为sql的执行计划.在sql前面加上explain关键字即可 如:explain select * from tbl_emp; 名词解释: id:[操作表的顺序] 1. ...
- mysql explain 派生表_MySQL的Explain命令
Explain命令是查看查询优化器如何决定执行查询的主要办法. 调用 EXPLAIN 要使用EXPLAIN,只需在查询中的SELECT关键字之前增加EXPLAIN.MySQL会在查询上设置一个标记.当 ...
- mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序
(8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING ...
- mysql执行系统命令_mysql 命令行执行 sql
1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013 ...
- mysql 命令行 结束编辑_MySql命令行执行多行命令编辑时非常有用的命令
在MySql命令行下进行多行命令编辑是很正常的一个操作,但有的时候,我们在执行多行命令编辑的时候,难免会有各种失误,一旦到此时,我们往往不得其法,其实了解一下MySql命令行的一些参数和提示的信息将会 ...
- mysql的explain怎么看_mysql中explain用法详解
如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...
- mysql执行计划_mysql的sql执行计划详解
点击蓝字"程序员考拉"欢迎关注! 引言: 实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有sq ...
- MySQL的explain简书_mysql _ explain用法
一. 举例 : explain select * from as_house ; (explain 只要放在select语句前就可以) explain的例子 从图中可以看出explain的结果,总共有 ...
- mysql 索引计划_Mysql索引、查询计划、优化方向
索引 Innodb索引(聚集索引)(聚簇表分布) Innodb是索引组织表,其结构是B+Tree.其表索引结构是聚簇表分布. 其叶子节点保存了Key+Row Data(聚集索引,按主键排序),其Key ...
- python执行mysql多个sql语句_mysql -- 一次执行多条sql语句
最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.s ...
最新文章
- PHP cURL可以在单个请求中检索响应标头和正文吗?
- wxWidgets:wxHashMap类用法
- 753 Cracking the Safe
- 华为云mysql端口号_华为云云耀服务器远程连接mysql,报错10038端口配置问题。
- i - 数据结构实验之图论九:最小生成树_「核心考点」2021计算机数据结构
- 光电技术加持,这款望远镜可以看见外太空
- 你都怎样看知乎日报?
- 回复《论WEB标准专家》。
- idea怎么和mysql连接并执行_IDEA配置mysql数据库的操作
- 一个figure存在多个legend:多行多列图例
- 让java类继承TBase进行序列化
- Ubuntu 12.04下jdk的安装与配置
- 哨兵1号(sentinel 1)数据各参数介绍
- 秩和比RSR法算法C语言,秩和比法(用秩和比法计算权重时怎样编秩?)
- 数学专业参考书整理推荐
- 金山安全报告:十大病毒危害排行出炉
- Tomcat的下载安装及静态部署
- amd支持服务器内存,AMD专用内存和普通内存的区别是什么?
- xp计算机启动检测硬盘,取消WinXP开机自检技巧五则
- C++出错_Heap corruption detected
热门文章
- 新手建站之【网站备案】③
- python汉语叫什么意思_Python是什么-百度经验
- Kattis - battleship【模拟】
- 《人人都在说谎:赤裸裸的数据真相》读书笔记1
- 新型城镇化3.0时代 数据交换是“智慧城市”的核心
- UVa 11991 - Easy Problem from Rujia Liu?
- 【OpenGL ES】着色语言GLSL
- C# 公历日期时间转农历日期方法 注解解读
- python导入随机函数库_Python随机函数库random的使用方法详解
- html调用wmp,web页面中嵌入window media player,支持IE和Chrome