mysql之SQL执行计划分析EXPLAIN
2017-11-04 00:00
656 查看
摘要: mysql之explain分析低效的SQL语句
开始想理理我学会的关于mysql的使用,当发现一个sql执行比较慢的时候,然后就要分析这条sql的执行计划是怎么样的,包括表如何连接和连接的顺序,那么在mysql中explain就派上用场了,然后可以写出更加优化的sql,添加合适的索引,当然执行计划不是一层不变的,会根据数据库的实际情况改变。
这边使用的是MariaDB数据库,MariaDB是目前最受关注的MySQL数据库衍生版,也被视为开源数据库MySQL的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过MySQL。
因为我这这边就建了一张表,其实多表关联也是类似的,几张表就几行。
id:这边的id是执行顺序,我也见过上下可以是一样的,我猜是同时执行的意思吧。
select_type:有simple(简单表,既不使用表连接或者子查询),primary(主查询,即外层查询),union(union中第二个或者后面的查询语句),subquery(子查询中的第一个select)等。
table:结果集的表名。
type:查询访问方式,type=all(遍历全表匹配查找,出现这个就比较尴尬了);type=index(索引全扫描);type=range(索引范围扫描)常见于比较符号;type=ref(使用非唯一索引扫描或者唯一索引的前缀扫描);type=eq_ref(使用了唯一索引,多见于多表唯一索引关联);type=const/system(单表中最多有一个匹配行,根据主键或者唯一索引);type=NULL(不用访问表或者索引,直接可以得到结果)等。
possible_keys :表示查询可能使用的索引。
key:表示实际使用的索引。
key_len:使用索引字段的长度。
rows:扫描行的数量。
Extra:对执行计划比较重要的情况的说明和描述。Using temporary是使用了临时表,Using filesort:MYSQL需要进行额外的步骤来返回的行排序,这两种都是需要优化的,还有其他的。
在mysql5.0.37开始支持对show profile的支持分析sql,使用select @@have_profiling看数据库是否支持
默认情况下,profiling是关闭的
可以通过set语句在session级别开启 set profiling=1
然后我执行一个比较耗时的操作
通过show profiles查看执行query_id
然后show profile for query语句可以看到执行过程中每个状态和消耗的时间。
可以看到上面的这个操作时间都花在了Sending date状态上。
周六是个好日子,阳光也正好!
开始想理理我学会的关于mysql的使用,当发现一个sql执行比较慢的时候,然后就要分析这条sql的执行计划是怎么样的,包括表如何连接和连接的顺序,那么在mysql中explain就派上用场了,然后可以写出更加优化的sql,添加合适的索引,当然执行计划不是一层不变的,会根据数据库的实际情况改变。
这边使用的是MariaDB数据库,MariaDB是目前最受关注的MySQL数据库衍生版,也被视为开源数据库MySQL的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过MySQL。
因为我这这边就建了一张表,其实多表关联也是类似的,几张表就几行。
id:这边的id是执行顺序,我也见过上下可以是一样的,我猜是同时执行的意思吧。
select_type:有simple(简单表,既不使用表连接或者子查询),primary(主查询,即外层查询),union(union中第二个或者后面的查询语句),subquery(子查询中的第一个select)等。
table:结果集的表名。
type:查询访问方式,type=all(遍历全表匹配查找,出现这个就比较尴尬了);type=index(索引全扫描);type=range(索引范围扫描)常见于比较符号;type=ref(使用非唯一索引扫描或者唯一索引的前缀扫描);type=eq_ref(使用了唯一索引,多见于多表唯一索引关联);type=const/system(单表中最多有一个匹配行,根据主键或者唯一索引);type=NULL(不用访问表或者索引,直接可以得到结果)等。
possible_keys :表示查询可能使用的索引。
key:表示实际使用的索引。
key_len:使用索引字段的长度。
rows:扫描行的数量。
Extra:对执行计划比较重要的情况的说明和描述。Using temporary是使用了临时表,Using filesort:MYSQL需要进行额外的步骤来返回的行排序,这两种都是需要优化的,还有其他的。
在mysql5.0.37开始支持对show profile的支持分析sql,使用select @@have_profiling看数据库是否支持
默认情况下,profiling是关闭的
可以通过set语句在session级别开启 set profiling=1
然后我执行一个比较耗时的操作
通过show profiles查看执行query_id
然后show profile for query语句可以看到执行过程中每个状态和消耗的时间。
可以看到上面的这个操作时间都花在了Sending date状态上。
周六是个好日子,阳光也正好!
相关文章推荐
- MySQL中使用explain和profile分析SQL执行计划和性能
- MySQL——通过EXPLAIN分析SQL的执行计划
- Mysql通过EXPLAIN 分析低效SQL 的执行计划
- .mysql的SQL语句执行计划分析:EXPLAIN
- mysql的SQL语句执行计划分析:EXPLAIN
- MySQL中通过EXPLAIN如何分析SQL的执行计划详解
- 【MySQL】SQL执行计划分析
- MySQL系列之五:explain执行计划分析
- EXPLAIN分析SQL的执行计划
- mysql 执行计划分析三看, explain,profiling,optimizer_trace
- 通过Explain查询和分析SQL的执行计划
- mysql 执行计划分析三看, explain,profiling,optimizer_trace
- MySQL性能分析, mysql explain执行计划详解
- SAP HANA SQL执行计划(SAP HANA SQL explain plan)(SQL 优化分析)
- MySQL性能分析, mysql explain执行计划详解
- mysql 执行计划分析三看, explain,profiling,optimizer_trace
- 每日MySQL之020:使用EXPLAIN查看SQL的执行计划
- mysql执行sql语句优化分析命令explain命令小记
- 在MySQL中使用explain查询SQL的执行计划
- mysql优化(三)–explain分析sql语句执行效率