
# 查询SQL执行计划（POST请求） - QueryTheSqlExecutionPlan
#### 功能介绍
- 查询SQL执行计划。
- 目前仅支持MySQL实例。
- 补充GET请求，处理超长SQL。
 
#### 调试
您可以在[API Explorer](https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=DAS&api=ShowSqlExplain)中调试该接口。
#### 授权信息
账号具备所有API的调用权限，如果使用账号下的IAM用户调用当前API，该IAM用户需具备调用API所需的权限。
- 如果使用角色与策略授权，具体权限要求请参见[权限和授权项](https://support.huaweicloud.com/api-das/das_01_0130.html)。
- 如果使用身份策略授权，需具备如下身份策略权限。
  
  | 授权项                               | 访问级别 | 资源类型（\*为必须）                                    | 条件键 | 别名                               | 依赖的授权项 |
  |:---|:---|:---|:---|:---|:---|
  | das:clouddba:showSqlExecutionPlan | read | connection instance | -   | das:clouddba:getSqlExecutionPlan | -      |
     
  
 
#### URI
POST /v3/{project_id}/instances/{instance_id}/sql/explain
表1路径参数 
| 参数          | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| project_id  | 是    | String | **参数解释**： 租户在某一Region下的项目ID。 获取方法请参见[获取项目ID](https://support.huaweicloud.com/api-das/das_01_0036.html)。 **约束限制：** 不涉及。 **取值范围：** 只能由英文字母、数字组成，且长度为32个字符。 **默认取值：** 不涉及。 |
| instance_id | 是    | String | **参数解释：** 实例ID。标识实例的唯一标识。可通过查看实例列表或者实例详情获取实例ID信息。 **约束限制：** 仅支持MySQL实例。 **取值范围：** 只能由英文字母、数字组成，且长度为36个字符。 **默认取值：** 不涉及。                                                                       |
   
#### 请求参数
表2请求Body参数 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| db_user_id | 否    | String | **参数解释：** 数据库用户ID。用户使用数据库账号与数据库建立的连接ID（数据库用户ID由[注册数据库用户](https://support.huaweicloud.com/api-das/das_01_0019.html)接口创建）。 **约束限制：** 不涉及。 **取值范围：** 只能由英文字母、数字、中划线组成，且长度为36个字符的UUID。 **默认取值：** 不涉及。 |
| database   | 否    | String | **参数解释：** 数据库名称。 **约束限制：** 仅支持MySQL实例的数据库。 **取值范围：** 不涉及。 **默认取值：** 不涉及。                                                                                                                     |
| sql        | 否    | String | **参数解释：** SQL语句。 **约束限制：** 不涉及。 **取值范围：** 不涉及。 **默认取值：** 不涉及。                                                                                                                           |
   
#### 响应参数
**状态码： 200**
表3响应Body参数 
| 参数              | 参数类型                                                                   | 描述                                                                                                                                       |
|:---|:---|:---|
| execution_plans | Array of [ExecutionPlan] objects | **参数解释：** SQL执行计划列表。                                                                                      |
| error_message   | String                                                                 | **参数解释：** SQL执行失败时，显示执行错误信息。 **取值范围：** 不涉及。 |
   
 表4ExecutionPlan 
| 参数            | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|
| id            | String | **参数解释：** 执行计划id。 **取值范围：** \[0, 2\^31-1\]，实际取决于查询。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| select_type   | String | **参数解释：** select子句的类型。 **取值范围：** - SIMPLE：简单查询  - PRIMARY：主查询  - UNION：UNION中的第二个或者后续查询  - DEPENDENT UNION：UNION中的相关查询  - UNION RESULT：UNION的结果集  - SUBQUERY：子查询  - DEPENDENT SUBQUERY：相关子查询  - DERIVED：派生表  - UNCACHEABLE SUBQUERY：不能缓存的子查询   |
| table         | String | **参数解释：** 数据库表。 **取值范围：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| partitions    | String | **参数解释：** 查询将匹配记录的分区。 **取值范围：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| type          | String | **参数解释：** 访问类型。 **取值范围：** - ALL：全表扫描  - index：全索引扫描  - range：范围扫描  - ref：非唯一索引扫描  - eq_ref：唯一索引关联  - const：常量级  - system：系统级  - NULL：无需访问表                                                                                                                                                                             |
| possible_keys | String | **参数解释：** 可能使用的键（索引）。 **取值范围：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| key           | String | **参数解释：** 实际使用的键（索引）。 **取值范围：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| key_len       | String | **参数解释：** 决定使用的键的长度。 **取值范围：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ref           | String | **参数解释：** 使用哪个列或常数与键一起来选择行。 **取值范围：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| rows          | String | **参数解释：** MySQL认为它执行查询时必须检查的行数。 **取值范围：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| filtered      | String | **参数解释：** 按表条件过滤的表行的估计百分比。 **取值范围：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| extra         | String | **参数解释：** 其他信息。 **取值范围：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
#### 请求示例
查询SQL执行计划（POST请求）
```
POST https://das.cn-north-1.myhuaweicloud.com/v3/054e292c9880d4992f02c0196d3ea468/instances/da304cd5bbb944de828759bc7be3d3fein01/sql/explain
{
  "db_user_id" : "2c250598-1e3c-4d31-bc19-be1d866247e6",
  "database" : "abc",
  "sql" : "select 1"
}
```
#### 响应示例
**状态码： 200**
```
{
  "execution_plans" : [ {
    "id" : "1",
    "select_type" : "SIMPLE",
    "table" : "",
    "partitions" : "",
    "type" : "NULL",
    "possible_keys" : "",
    "key" : "",
    "key_len" : "",
    "ref" : "",
    "rows" : "",
    "filtered" : "",
    "extra" : "No tables used"
  } ]
}
```
#### 状态码
| 状态码 | 描述                   |
|:---|:---|
| 200 | Success.             |
| 400 | BadRequest.          |
| 500 | InternalServerError. |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-das/das_01_0035.html)。
