mysql explain 级别
MySQL是目前最为广泛使用的开源关系型数据库,而"EXPLAIN"是MySQL中最为基础的一个命令。它提供了数据库询问优化器的执行过程,并返回一行合集。目的是为了帮助用户了解SQL查询的执行过程和效率,以便对SQL查询进行分析与优化。而EXPLAIN在MySQL中有多种级别,本文就将详细讲述MySQL中各个级别的作用及使用方法。
一、EXPLAIN命令
EXPLAIN命令是MySQL数据库中优化语句的最基本体现。该命令可以用于输出优化器对查询的执行计划。查询执行计划是一个关于查询执行的结果集合的重要信息。当一个查询存在性能问题时,使用EXPLAIN排查问题会非常方便。
使用方法非常简单。只需要在要优化的SQL语句前添加一个“EXPLAIN”关键字,数据库引擎将会输出查询的执行计划。例如,我们要优化一条查询语句:
SELECT * FROM `user` WHERE `username` = 'xxxx';
只需要在前面加上EXPLAIN命令即可:
EXPLAIN SELECT * FROM `user` WHERE `username` = 'xxxx';
系统会输出以下信息:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE user ref idx_username idx_username 103 const 1 Using index
二、EXPLAIN语句解释
在输出的查询执行计划中,文件头中的每个字段的意义如下:
特别是其中的type字段,用来表示优化器选取了哪种访问方式来访问表。各种访问方式的效率从差到好为:
system > const > eq_ref > ref > range > index > all
三、EXPLAIN级别
MySQL中有多种EXPLAIN级别可供选择,分别适用于不同的场景。下面逐一介绍各个级别:
1. EXPLAIN
该级别是最基础的级别,只能展示比较简单的查询语句计划,不能窥见MySQL执行优化器的深层运作。但其简洁的结果、直观的输出、易读性强以及查询速度快等特点,使其成为优化查询的必备利器。
例如,当我们执行以下语句:
EXPLAIN select * from information_schema.processlist limit 10;
输出结果如下:
id select_type table type possible_keys key key_len ref rows Extra  1 SIMPLE information_schema.processlist ALL NULL NULL NULL NULL 4367 Using where
2. EXPLAIN FORMAT=JSON
JSON格式可以使结果更加易于处理、查询和分析。以这种格式查询将返回一个JSON格式的输出结果,其中包含了查询的执行计划信息以及更多的细节数据。
例如,当我们执行以下语句:
mysql数据库的方法EXPLAIN FORMAT=JSON select * from information_schema.processlist limit 10;
输出结果如下:
{  "query_block": {    "select_id": 1,    "cost_info": {      "query_cost": "4.45"    },    "table": {      "table_name": "processlist",      "access_type": "ALL",      "rows_examined_per_scan": 4367,      "rows_produced_per_join": 4367,      "filtered": "33.33",      "cost_info": {        "read_cost": "3.39",        "eval_cost": "0.68",        "prefix_cost": "4.45",        "data_read_per_join": "1M"      },      "used_columns": [        "ID",        "USER",        "HOST",        "DB",        "COMMAND",        "TIME",        "STATE",        "INFO"      ]    }  } }
3. EXPLAIN EXTENDED
该级别在基础的EXPLAIN级别上多了一些有用的信息,例如MySQL优化器为查询语句选择的索引、分数评估等信息等等,这对于调试和分析复杂的查询语句极有帮助。
例如,当我们执行以下语句:
EXPLAIN EXTENDED select * from information_schema.processlist limit 10;
输出结果如下:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
2 DERIVED processlist NULL NULL ALL NULL NULL NULL 4367 33.33 NULL
注意:这里会出现Impossible WHERE的提示,是由于执行计划中,EXPLAIN使用WHERE时,查看是否能执行索引扫描,如果不能扫描索引就会提示Impossible WHERE,那么这个查询就会对表中所有记录进行全表扫描,所以需要对查询语句进行优化。
4. EXPLAIN PARTITIONS
该级别可以用于查询语句在物理上如何进行分区,以及查询语句中列名是怎样映射到分区表上的。
例如,当我们执行以下语句:
EXPLAIN PARTITIONS select * from information_schema.processlist limit 10;
输出结果如下:
id    select_type    table        partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra  1    SIMPLE    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE  2    DERIVED    processlist    NULL    NULL    ALL    NULL    NULL    NULL    4367    33.33    NULL

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。