首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL EXPLAIN执行计划详解

查询,每个表输出只有一行,若多表关联,则输出多行。别名表单算为一个表,因此如果把表和自己连接,输出也会有两行。这里定义非常广:可以是一个查询,一个 UNION 结果。...增加了EXPLAIN之后,MySQL可能仍然会执行部分查询,如果查询FROM字句中包括查询,那么MySQL实际会执行查询,并将其结果放在一个临时表,然后完成外层查询优化。...如果查询没有查询或关联查询,那么只会有唯一SELECT,每一行该列中都将显示一个1,否则,内层SELECT语句一般会顺序编号,对应于其原始语句中位置。...其他部分标记如下: SUBQUERY,包含在SELECT子句(不在from子句中查询SELECT,结果不依赖于外部查询。 DERIVED,包含在from子句中查询SELECT。...2.7 key_len MySQL索引中使用字节数,通过这个值可以算出具体使用了索引哪些列,计算时需要考虑字符集,如果字段允许为 NULL,需要1字节记录是否为 NULL。

1.7K140

MYSQL EXPLAIN结果详解

如将主键置于where列表MySQL就能将该查询转换为一个常量。当查询表只有一行情况下,使用system。 const:表最多有一个匹配行,它将在查询开始时被读取。...可以替换IN查询,但只适合下列形式查询非唯一索引:value IN (SELECT key_column FROM single_table WHERE some_expr)。...( MySQL能使用哪个索引该表中找到行) 7 key 实际使用索引(键),必然包含在possible_keys。如果没有选择索引,索引是NULL。...Using where:不用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表全部请求列都是同一个索引部分时候,表示mysql服务器将在存储引擎检索行后再进行过滤。...No tables used:Query语句中使用from dual 或不含任何from子句。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

2.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL 查询专题

NULL 与不匹配 通过过滤选择出不具有特定值行时,你可能希望返回具有 NULL 值行。但是,不行。因为未知具有特殊含义,数据库不知道它们是否匹配,所以匹配过滤或不匹配过滤时不返回它们。...❑ GROUP BY子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致地进行数据分组。 ❑ 如果在 GROUP BY 子句中嵌套了分组,数据将在最后指定分组上进行汇总。...指定一条 ORDER BY 子句时,应该保证它是SELECT语句中最后一条子句,否则这将报错 不限制是否使用非选择列进行排序 除了能用列名指出排序顺序外,ORDER BY 还支持按相对列位置进行排序,...where item_price >= 10 ) 列必须匹配 WHERE句中使用查询(如这里所示),应该保证SELECT语句具有与 WHERE句中相同数目的列。...所有这些限制以及更多限制都可以用全文本搜索来解决。使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词。MySQL 创建指定列各词一个索引,搜索可以针对这些词进行。

5K30

MySQL【第六章】——优化器及执行计划 - Explain

2) primary: 查询包含任何复杂子部分,最外层查询则被标记      3) subquery: select 或者 where 列表包含了查询      4) derived:...from 列表包含查询被标记为 derived Mysql 会递归执行这些查询,把结果放到临时表里      5) union: 若在第二个 select 中出现 union之后,则被标记为...2) Using where    mysql 将在存储引擎检索行后再进行过滤,许多where条件里涉及索引列,当(并且如果)它读取索引时,就能被存储引擎检验,因此不是所有带where子句查询都会显示...包含任何用户自定义函数,存储函数,用户变量,临时表,mysql数据库系统表或者包含任何列级别权限表,都不会被缓存。...有一点需要注意,MySQL并不是会因为查询包含一个不确定函数而不检查查询缓存,因为检查查询缓存之前,MySQL不会解析查询语句,所以也无法知道语句中是否有不确定函数。

90020

MySQLMySQL Explain性能调优详解

专栏持续更新MySQL详解 日常工作,我们会有时会开慢查询去记录一些执行时间比较久SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL...语句中第二个select开始后面所有select) SUBQUERY(查询第一个SELECT,结果不依赖于外部查询) DEPENDENT SUBQUERY(查询第一个SELECT,依赖于外部查询...如将主键置于where列表MySQL就能将该查询转换为一个常量,system是const类型特例,当查询表只有一行情况下,使用system NULL: MySQL优化过程中分解语句,执行时甚至不用访问表或索引...在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引列来提高你查询性能。...如果是这样,创造一个适当索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用键(索引),必然包含在possible_keys 如果没有选择索引,键是NULL。

14210

MySQL调优系列——MySQL常用优化技巧

如果是查询,id序号会递增,id值越大优先级越高,越先被执行 3. id如果相同,可以认为是一组,从上往下顺序执行;在所有组,id值越大,优先级越高,越先执行 -- 查看在研发部并且名字以Jef...二、select_type查询每个select子句类型 PRIMARY:包含查询SQL 主查询 (最外层) SUBQUERY:包含查询SQL 查询 (非最外层) simple:简单查询...五、possible_keys 指出MySQL能使用哪个索引表中找到记录,查询涉及到字段上若存在索引,则该索引将被列出,但不一定被查询使用(该查询可以利用索引,如果没有任何索引显示 null)...在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引列来提高你查询性能。...如果是这样,创造一个适当索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用键(索引),必然包含在possible_keys 如果没有选择索引,键是NULL

1.7K20

SQL优化完整详解

命令查看当前 MySQL 进行线程,包括线程状态,是否锁表等等,可以实时查看 SQL 执行情况, 同时对一些锁表操作进行优化。...某些情况MySQL可以使用一个索引来满足 ORDER BY子句,而不需要额外排序。...4)、DERIVED:表示包含在from子句中查询select,我们 from 列表包含查询会被标记为derived 。...可以为相关域从WHERE句中 选择一个合适语句 6、key : 实际使用索引。如果为NULL,则没有使用索引。很少情况下,MYSQL选择优化不足索引 。...将在表4.3讨论,但这里可以看到例子是Using temporary和Using filesort, 意思MYSQL根本不能使用索引,结果是检索会很慢 extra列返回描述意义

1.2K40

详解Mysql执行计划explain

如果为空,没有可能索引,可以为相关域从WHERE句中选择一个合适语句 key_len 表示索引中使用字节数,可通过该列计算查询中使用索引长度(key_len显示值为索引字段最大可能长度...这种情况下,可以SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引 key_len 使用索引长度...7、select_type 所使用查询类型,判断是否是复杂语句,主要有以下这几种查询类型 DEPENDENT SUBQUERY:查询内层第一个SELECT,依赖于外部查询结果集; DEPENDENT...将在表4.3讨论,但这里可以看到例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢 说明:extra列返回描述意义 Distinct...总结 • EXPLAIN不会告诉你关于触发器、存储过程信息或用户自定义函数对查询影响情况 • EXPLAIN不考虑各种Cache • EXPLAIN不能显示MySQL执行查询时所作优化工作

92020

查看Mysql执行计划

选择解释标签,就可以查看到sql执行计划了 ?...如果为空,没有可能索引,可以为相关域从WHERE句中选择一个合适语句 4、key 实际使用索引。如果为NULL,则没有使用索引。很少情况下,MYSQL选择优化不足索引。...这种情况下,可以SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引key_len使用索引长度...7、select_type 所使用查询类型,判断是否是复杂语句,主要有以下这几种查询类型 DEPENDENT SUBQUERY:查询内层第一个SELECT,依赖于外部查询结果集;DEPENDENT...将在表4.3讨论,但这里可以看到例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢 说明:extra列返回描述意义 Distinct

3.3K10

MySQL视图更新

本文主要说明视图更新限制,如需关于视图更多知识,参考:MySql视图原理讲解与使用大全 视图简介 视图不是表,不能直接存储数据,是一张虚拟表,视图和数据库表存在着对应关系,我们某些情况下是可以通过视图来操作数据库表...,这样可以简化查询操作(一般情况下视图是用来查询用),某种条件下是可以利用视图来更新数据库表数据,后面会提到视图更新。...也就是说,可以UPDATE、DELETE或INSERT等语句中使用它们,以更新基表内容。对于可更新视图,视图中行和基表行之间必须具有一对一关系。...DISTINCT GROUP BY HAVING UNION或UNION ALL 位于选择列表查询 Join FROM子句中不可更新视图 WHERE句中查询,引用FROM子句中表。...WITH[CASCADED|LOCAL] CHECK OPTION能不能决定视图是否能更新? 这两个参数基本定义如下: LOCAL参数表示更新视图时只要满足该视图本身定义条件即可。

3.2K30

MySQL 索引概览

本文将详细介绍索引概览和分类,并讨论使用索引时应该权衡要素,关于索引底层实现内容将在下一篇文章 MySQL 索引结构 中介绍。...如果某个数据列包含许多重复内容,为它建立索引效果就很差,这个性质称为索引选择性:不重复索引值和数据表记录总数比值。索引选择性越高则查询效率越高。...可以扩展了解一下,理论上最左匹配原则索引对 where 中子句顺序也是敏感,但是由于MySQL查询优化器会自动调整 where 子句条件顺序以使用适合索引,所以实际上 where 子句顺序不影响索引效果...命令来查看在某个查询语句中索引是否生效,具体用法请参考官网文档。...因此如果 SELECT 内容很少,为了避免回表,可以把 SELECT 字段都加到联合索引,这也就是宽索引概念。但是需要注意,如果索引字段过多,存储和维护索引成本也会增加。

78720

MySQL数据库、数据表基本操作及查询数据

他能唯一地标识表一条记录,可以结合外键来定义不同数据表之间关系,并且可以加快数据库查询速度。 单字段主键 定义同时指定主键。...其位置放置定义完所有的主键之后 使用外键约束 外键用来两个表数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。...带 LIKE字符匹配查询 LIKE关键字即是使用通配符来进行匹配查找。通配符是一种SQL WHERE条件子句中拥有特殊意思字符,可以和 LIKE一起使用通配符有 %和 _。... SELECT语句中使用 IS NULL子句,可以查询某字段内容为空记录。...查询结果不重复 SELECT语句中,使用 DISTINCT关键字来指示MySQL消除重复记录。

3K20

MySQL SQL语句是如果被执行?(1)原

实际上还是解析时候报错,解析SQL环节里面有个预处理器。 它会检查生成解析树,解决解析器无法解析语义。比如,它会检查表和列名是否存在,检查名字和别名,保证没有歧义。...或者说数据库最终执行SQL是不是就是我们发送SQL? 这个答案是否。一条SQL语句是可以有很多种执行方式,最终返回相同结果,他们是等价。...执行查询时候可能用到哪些索引,实际上用到了什么索引? explan(执行计划) MySQL提供了一个执行计划工具。我们SQL语句前面加上explain,就可以看到执行计划信息。...如将主键置于where列表MySQL就能将该查询转换为一个常量,system是const类型特例,当查询表只有一行情况下,使用system NULL MySQL优化过程中分解语句,执行时甚至不用访问表或索引...key列显示MySQL实际决定使用键(索引),必然包含在possible_keys 如果没有选择索引,键是NULL。

1.1K20

MySQL 【教程二】

可以 WHERE句中指定任何条件。 你可以使用 AND 或者 OR 指定一个或多个条件。 WHERE 子句也可以运用于 SQL DELETE 或者 UPDATE 命令。...你可以 WHERE句中指定任何条件。 你可以一个单独表同时更新数据。 当你需要更新数据表中指定行数据时 WHERE 子句是非常有用。...你可以 WHERE句中指定任何条件 您可以单个表中一次性删除记录。 当你想删除数据表中指定记录时 WHERE 子句是非常有用。...> MySQL LIKE 子句 我们知道 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我们可以 SELECT 语句中使用 WHERE 子句来获取指定记录。...命令提示符中使用 LIKE 子句 以下我们将在 SQL SELECT 命令中使用 WHERE...LIKE 子句来从MySQL数据表 runoob_tbl 读取数据。

4.2K20

如何写优雅SQL原生语句?

sql各语句执行顺序概览与讲解 项目实战一段sql说明讲解 sql语句中别名使用 书写sql语句注意事项 前言 上一篇讲Mysql基本架构时,以“sql查询语句MySql架构具体是怎么执行...知道了sql查询语句MySql架构具体执行流程,但是为了能够更好更快写出sql语句,我觉得非常有必要知道sql语句中各子句执行顺序。...现在开始我们学习 语句中各子句完整执行顺序概括(按照顺序号执行) from (注:这里也包括from语句) join on where group by(开始使用select别名,后面的语句中可以使用...查询对数据已经进行排序后,外层排序方式如果和查询排序分数相同,都是分数倒序,外层排序可以去掉,没有必要写两遍。...别名也可以group by与having时候都可使用 别名可以order by排序时候被使用 查看上面一段sql delete , update MySQL可以使用别名,别名多表

1.8K20

MySQLexplain结果字段介绍(1)

MySQLexplain结果字段介绍 我们使用MySQL时候,用最多情况可能就是select语句了,当我们一个表查找数据时候,经常会遇到查找速度比较慢情况,作为一名DBA,我也会经常遇见业务方写...而判断一条SQL语句是否会变慢最主要依据还是"执行计划"。 MySQL可以通过explain语句来查看一个SQL执行计划。...01 id值 一个大select语句中,每一个语句都对应一个id值,例如上面的例子,这个select 1就对应了一个id值,再来看下面这个SQL: mysql:(none) 21:49:37...,如果使用了union这个连接关键字,这个select语句就变成了包含2个selectSQL,可以看到,还出现了第3行内容,这一行内容其实是union语法中间临时表,临时表id值为null。...,选择查询物化之后与外层查询进行连接查询时,该查询对应select_type属性就是MATERIALIZED 03 table 表名称,这个比较容易理解。

2.8K20

SQL 语法速成手册

查询也称为内部查询或内部选择,而包含查询语句也称为外部查询或外部选择查询可以嵌套在 SELECT,INSERT,UPDATE 或 DELETE 语句内或另一个查询。...查询通常会在另一个 SELECT 语句 WHERE句中添加。 您可以使用比较运算符,如 >,<,或 =。比较运算符也可以是多行运算符,如 IN,ANY 或 ALL。...可以 WHERE句中使用操作符 运算符 描述 = 等于 不等于。注释: SQL 一些版本,该操作符可被写成 !...= 'Kids Place'; IN 和 BETWEEN IN 操作符 WHERE句中使用,作用是指定几个特定值任选一个值。...注意: MySQL ,分号 ; 是语句结束标识符,遇到分号表示该段语句已经结束,MySQL 可以开始执行了。

16.8K20

MySql数据库优化细节

记录一些MySQL优化一些细节 选取最适用字段属性(出处) MySQL 可以很好支持大数据量存取,但是一般说来,数据库表越小,它上面执行查询也就会越快。...因此,创建表时候,为了获得更好性能,我们可以将表字段宽度设得尽可能小。...例如,定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要空间,甚至使用VARCHAR这种类型也是多余,因为CHAR(6)就可以很好完成任务了。...对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为 MySQL ,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来速度要比文本类型快得多。...WHERE句中"="左边表达式进行函数、算术运算或其他表达式运算 使用前缀为%LIKE 使用负向查询,如NOT, !

1.4K20

【数据库】03——初级开发需要掌握哪些SQL语句

但是一些数据库(如Mysql和SQL Server),匹配字符串时并不区分大小写。 字符串可以应用许多函数运算,比如连接字符串(||),提取串,去字符串后空格trim等等。...8.3 空关系测试 SQL包含一个特性,测试一个查询结果是否存在元组,exist结构作为参数查询非空时返回true值。...包含了查询查询相关名称上可以应用作用域规则,根据此规则,一个查询只能使用此查询本身定义,或者包含此查询任何查询定义相关名称,如果一个相关名称既查询中局部定义,有包含该查询查询全局定义...8.5 from子句中查询 前面的查询都是where句中使用,下面介绍from子句中使用查询。...在编译时并不能总是可以判断一个查询返回结果是否有多个元组,如果一个查询执行后其结果中有不止一个元组,则会产生一个运行时错误。 从技术上将标量子查询仍然是关系。

3.5K31

获取有性能问题SQL方法2.慢查询日志介绍3. 实时获取3.SQL解析预处理及生成执行计划4 对特定SQL查询优化

尽量避免 where 句中where num is null,这样不用索引,要全表扫描,可用 0 代替 null 避免 where 中用or!...=,因为要全表扫描 尽量避免 where 中用 or,因为若一个字段有索引,一个没有,则要全表扫描 like”%abc%”,全表扫描 避免 where 句中对字段进行函数操作,因为要全表扫描 使用复合索引时...where num is null 可以num上设置默认值0,确保表num列没有null值,然后这样查询: select id from t where num=0 很多时候用 exists...代替 in 是一个好选择Where子句替换HAVING 子句 因为HAVING 只会在检索出所有记录之后才对结果集进行过滤 1....3.3.1 可能造成MySQL生成错误执行计划原因 ? ? ? 3.3.2 MySQL优化器可优化SQL类型 重定义关联顺序 ?

2.3K91
领券