---
title: "EXPLAIN | OceanBase 文档中心"
description: "EXPLAIN 描述 该语句用于解释 SQL 语句的执行计划，可以是 SELECT 、 DELETE 、 INSERT 、 REPLACE 或 UPDATE 语句。 EXPLAIN 与 DESCRIBE 、 DESC 互为同义词。 语法 {EXPLAIN | DESCRIBE | DESC} [explain_typ…"
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.1.4 社区版

# EXPLAIN

更新时间：2023-08-03 17:20:32

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V3.1.4/zh-CN/1400.developer-guide/700.sql-reference/500.sql-statements/3900.explain.md)  

## 描述

该语句用于解释 SQL 语句的执行计划，可以是 `SELECT`、`DELETE`、`INSERT`、`REPLACE` 或 `UPDATE` 语句。

`EXPLAIN` 与 `DESCRIBE`、`DESC` 互为同义词。

## 语法

```sql
{EXPLAIN | DESCRIBE | DESC} [explain_type] dml_statement;

explain_type：
    BASIC
  | OUTLINE
  | EXTENDED
  | EXTENDED_NOADDR
  | PARTITIONS
  | FORMAT = {TRADITIONAL| JSON}

dml_statement:
    SELECT statement
  | DELETE statement
  | INSERT statement
  | REPLACE statement

```

## 参数解释

| **参数** | **描述** |
| --- | --- |
| BASIC | 指定输出计划的基础信息，如算子 ID、算子名称、所引用的表名。 |
| OUTLINE | 指定输出的计划信息包含 `OUTLINE` 信息。 |
| EXTENDED | `EXPLAIN` 产生附加信息，包括：每个算子的输入列和输出列，访问表的分区信息，当前使用的 Filter 信息，如果当前算子使用了索引，显示所使用的索引列及抽取的 Query Range。 |
| EXTENDED_NOADDR | 以简约的方式展示附加信息。 |
| PARTITIONS | 显示分区相关信息。 |
| FORMAT = {TRADITIONAL\| JSON} | 指定 `EXPALIN` 的输出格式：   - `TRADITIONAL`：表格输出格式 - `JSON`：`KEY:VALUE` 输出格式，JSON 显示为JSON 字符串，包括 `EXTENDED` 和 `PARTITIONS` 信息。 |

## 示例

- 省略 `explain_type`，返回语句的执行计划。

  ```sql
  obclient> EXPLAIN SELECT * FROM t1,t2 WHERE t1.c2=t2.c2 AND t2.c1 > 4\G
  *************************** 1. row ***************************
  Query Plan: =======================================
  |ID|OPERATOR   |NAME|EST. ROWS|COST   |
  ---------------------------------------
  |0 |HASH JOIN  |    |9801000  |5933109|
  |1 | TABLE SCAN|t2  |10000    |6219   |
  |2 | TABLE SCAN|t1  |100000   |68478  |
  =======================================

  Outputs & filters:
  -------------------------------------
    0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2]), filter(nil),
        equal_conds([t1.c2 = t2.c2]), other_conds(nil)
    1 - output([t2.c2], [t2.c1]), filter(nil),
        access([t2.c2], [t2.c1]), partitions(p0)
    2 - output([t1.c2], [t1.c1]), filter(nil),
        access([t1.c2], [t1.c1]), partitions(p0)

  ```
 - 通过 `EXTENDED_NOADDR` 关键字输出附加信息。

  ```sql
  obclient> EXPLAIN EXTENDED_NOADDR SELECT * FROM t1,t2 WHERE t1.c2=t2.c2 AND t2.c1 > 4\G
  *************************** 1. row ***************************
  Query Plan: =======================================
  |ID|OPERATOR   |NAME|EST. ROWS|COST   |
  ---------------------------------------
  |0 |HASH JOIN  |    |9801000  |5933109|
  |1 | TABLE SCAN|t2  |10000    |6219   |
  |2 | TABLE SCAN|t1  |100000   |68478  |
  =======================================

  Outputs & filters:
  -------------------------------------
    0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2]), filter(nil),
        equal_conds([t1.c2 = t2.c2]), other_conds(nil)
    1 - output([t2.c2], [t2.c1]), filter(nil),
        access([t2.c2], [t2.c1]), partitions(p0),
        is_index_back=false,
        range_key([t2.c1]), range(4 ; MAX),
        range_cond([t2.c1 > 4])
    2 - output([t1.c2], [t1.c1]), filter(nil),
        access([t1.c2], [t1.c1]), partitions(p0),
        is_index_back=false,
        range_key([t1.__pk_increment], [t1.__pk_cluster_id], [t1.__pk_partition_id]), range(MIN,MIN,MIN ; MAX,MAX,MAX)always true

  ```
 - 展示 `TRADITIONAL` 格式的执行计划。

  ```sql
  obclient> EXPLAIN FORMAT=TRADITIONAL SELECT * FROM t1,t2 WHERE t1.c2=t2.c2 AND t2.c1 > 4\G
  *************************** 1. row ***************************
  Query Plan: =======================================
  |ID|OPERATOR   |NAME|EST. ROWS|COST   |
  ---------------------------------------
  |0 |HASH JOIN  |    |9801000  |5933109|
  |1 | TABLE SCAN|t2  |10000    |6219   |
  |2 | TABLE SCAN|t1  |100000   |68478  |
  =======================================

  ```
 - 展示 `JSON` 格式的执行计划。

  ```sql
  obclient> EXPLAIN FORMAT=JSON SELECT * FROM t1,t2 WHERE t1.c2=t2.c2 AND t2.c1 > 4\G
  *************************** 1. row ***************************
  Query Plan: {
    "ID":2,
    "OPERATOR":"JOIN",
    "NAME":"JOIN",
    "EST.ROWS":9800999,
    "COST":5933108,
    "output": [
      "t1.c1",
      "t1.c2",
      "t2.c1",
      "t2.c2"
    ],
    "TABLE SCAN": {
      "ID":0,
      "OPERATOR":"TABLE SCAN",
      "NAME":"TABLE SCAN",
      "EST.ROWS":10000,
      "COST":6218,
      "output": [
        "t2.c2",
        "t2.c1"
      ]
    },
    "TABLE SCAN": {
      "ID":1,
      "OPERATOR":"TABLE SCAN",
      "NAME":"TABLE SCAN",
      "EST.ROWS":100000,
      "COST":68477,
      "output": [
        "t1.c2",
        "t1.c1"
      ]
    }
  }

  ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
