MySQL explain分析字段记录

文章讨论了MySQL在查询过程中的索引使用情况。当key为PRIMARY时,表示使用了主键索引;若key为空,则说明未使用索引,执行全表扫描,效率最低。覆盖索引策略选择代价小的普通索引,避免查询主键索引增加成本。二级索引的叶子节点存储主键值,有助于优化查询。
  1. key为PRIMARY时,表明MySQL执行过程中选择了主键索引进行数据查询。
    主键索引

2.key为空时,表明MySQL没有使用索引,进行了全表扫描查询(type = ALL),这是查询效率是最低的。
key为空

3.覆盖索引,一个SQL如果条件中同时出现几个索引,优化器会选择代价小的普通索引,因为查询主键索引的B+树成本比查询二级索引B+数的成本大,同时二级索引B+树的叶子节点数据存的就是主键值。
覆盖索引

### MySQL EXPLAIN 命令输出字段详解 MySQL 的 `EXPLAIN` 命令用于分析 SQL 查询的执行计划,帮助理解查询的执行方式并进行优化。以下是 `EXPLAIN` 输出中各个关键字段的详细解释: #### 1. `id` `id` 表示查询中执行 `SELECT` 子句的顺序。如果 `id` 相同,则执行顺序由上至下;如果 `id` 不同,则 `id` 越,执行优先级越高 [^1]。 #### 2. `select_type` `select_type` 表示查询类型,常见的值包括: - `SIMPLE`:简单的 SELECT 查询,不使用子查询或联合。 - `PRIMARY`:最外层的查询。 - `UNION`:在 `UNION` 查询中的第二个或后面的查询。 - `SUBQUERY`:在子查询中的第一个查询 [^2]。 #### 3. `table` `table` 表示查询涉及的表名。如果是联合查询,可能会显示为 `<union>` 或 `<derived>` 等特殊值 [^3]。 #### 4. `partitions` `partitions` 显示查询匹配的分区。如果表未分区,则此字段为空 [^4]。 #### 5. `type` `type` 表示连接类型,是最重要的字段之一。它显示了表之间的连接方式,常见的值包括: - `system`:表仅有一行。 - `const`:通过主键或唯一索引查找,返回一行。 - `eq_ref`:通过主键或唯一索引连接表。 - `ref`:通过非唯一索引查找。 - `range`:范围扫描。 - `index`:全索引扫描。 - `ALL`:全表扫描(性能最差) 。 #### 6. `possible_keys` `possible_keys` 显示查询可能使用的索引列表。如果为空,则表示没有合适的索引可用 [^2]。 #### 7. `key` `key` 表示实际使用的索引。如果为 `NULL`,则表示未使用索引 [^3]。 #### 8. `key_len` `key_len` 表示使用的索引字段的长度。此值可以帮助判断索引的使用情况,例如是否使用了部分索引 [^4]。 #### 9. `ref` `ref` 显示索引的哪一列被使用,以及与哪个列或常量进行比较 。 #### 10. `rows` `rows` 表示 MySQL 估计需要扫描的行数。此值越小越好 [^2]。 #### 11. `filtered` `filtered` 表示按表条件过滤后剩余的行数的百分比。此值越接近 100,表示过滤效果越好 [^3]。 #### 12. `Extra` `Extra` 包含额外的信息,常见的值包括: - `Using filesort`:需要额外的排序操作。 - `Using temporary`:需要创建临时表。 - `Using where`:使用了 WHERE 条件过滤。 - `Using index`:使用了覆盖索引 [^4]。 ### 使用 EXPLAIN 的注意事项 - `EXPLAIN` 只能用于 `SELECT` 查询,不能用于 `INSERT`、`UPDATE` 或 `DELETE`。 - 对于复杂查询,`EXPLAIN` 的输出可能包含多个行,每行代表一个表的执行计划。 - `EXPLAIN` 的输出是估计值,实际执行时可能会有所不同 [^1]。 ### 示例 以下是一个简单的 `EXPLAIN` 使用示例: ```sql EXPLAIN SELECT * FROM employees WHERE department_id = 5; ``` 输出可能如下: | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | |----|-------------|-----------|------------|------|---------------|---------|---------|-------|------|----------|-------| | 1 | SIMPLE | employees | NULL | ref | idx_dept_id | idx_dept_id | 4 | const | 100 | 100.00 | NULL | 在这个例子中,`EXPLAIN` 显示查询使用了 `idx_dept_id` 索引,并且通过 `ref` 类型进行连接,扫描了 100 行数据 [^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值