企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
#### 概念 一个sql语句在没有执行(运行)之前,先计算一下该sql语句需要调用的相关资源,再决定该sql语句是否要最终执行,该行为被称为“执行计划”。 #### 作用 主要用于分析sql语句的执行情况(并不执行sql语句)得到sql语句是否使用了索引,使用了哪些索引。 ![](https://box.kancloud.cn/ae8cc55761ddfb56f0b36a4c9350a77b_735x779.png) #### 语法 ~~~ explain SQL语句; ~~~ 结果 ~~~ +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+ | 1 | SIMPLE | t1 | NULL | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL | +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+ ~~~ 没有使用索引和解释 ~~~ id: 1 //SELECT识别符。这是SELECT查询序列号。这个不重要,查询序号即为sql语句执行的顺序. select_type: SIMPLE //搜索类型,从最好到最差的连接类型为const、eq_reg、ref、range、 indexhe和ALL table: t1 //表名 partitions: NULL type: ALL possible_keys: NULL //显示可能应用在这张表中的索引。如果为null,没有可能的索引。 key: NULL // 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用 key_len: NULL //使用的索引的长度。在不损失精确性的情况下,长度越短越好. ref: NULL //显示索引的哪一列被使用了,如果可能的话,是一个常数. rows: 1 //mysql认为必须检查的用来返回请求数据的行数. filtered: 100.00 Extra: NULL ~~~ 使用索引的情况 ~~~ id: 1 select_type: SIMPLE table: t1 partitions: NULL type: const possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: const rows: 1 filtered: 100.00 Extra: NULL 1 row in set, 1 warning (0.00 sec) ~~~