# 使用 EXPLAIN 优化查询

URL: https://caijiao.org/mariadb/table/explain
Source: docs/mariadb/table/explain.md
Description: 本节介绍如何使用 MariaDB 的 EXPLAIN 语句分析查询执行计划，帮助发现性能瓶颈并优化 SQL 查询效率。

## 1. 什么是 EXPLAIN

`EXPLAIN` 用于展示 MariaDB 执行 SQL 查询时的执行计划，包含访问表的顺序、使用的索引、连接类型等信息，有助于发现查询中的性能问题。

## 2. 基本用法

在查询语句前加上 `EXPLAIN`：

```sql
EXPLAIN SELECT * FROM users WHERE age > 30;
````

结果包含多列重要信息：

* `id`：查询序列号。
* `select_type`：查询类型（简单查询、联合查询等）。
* `table`：访问的表名。
* `type`：连接类型，性能依次递减，优选 `const`、`eq_ref` 等。
* `possible_keys`：可能使用的索引。
* `key`：实际使用的索引。
* `rows`：估计扫描的行数。
* `Extra`：额外信息，如是否使用临时表或文件排序。

## 3. 结合 EXPLAIN 优化查询

* 确保查询条件使用了索引（`key` 列不为空）。
* 避免全表扫描（`type` 不应为 `ALL`）。
* 通过调整索引或重写 SQL 优化连接顺序。
* 避免在 `WHERE` 子句对索引列使用函数或计算。

## 4. EXPLAIN ANALYZE

MariaDB 10.1 及以上版本支持 `EXPLAIN ANALYZE`，不仅显示执行计划，还实际执行查询并给出耗时：

```sql
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;
```

---

使用 EXPLAIN 可以精准定位查询性能瓶颈，指导索引设计和 SQL 优化，提高数据库效率。
