OceanBase EXPLAIN

2021-06-11 10:32 更新

描述

該語(yǔ)句用于解釋 SQL 語(yǔ)句的執(zhí)行計(jì)劃,可以是 SELECT、DELETE、INSERT、REPLACE 或 UPDATE 語(yǔ)句。

格式

獲取表或列的信息:
{EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild]

獲取 SQL 計(jì)劃信息:
{EXPLAIN | DESCRIBE | DESC} 
[BASIC | OUTLINE | EXTENDED | EXTENDED_NOADDR | PARTITIONS | FORMAT = {TRADITIONAL| JSON}] 
{SELECT statement | DELETE statement | INSERT statement | REPLACE statement| UPDATE statement}

參數(shù)解釋

參數(shù)

描述

tbl_name

指定表名。

col_name

指定表的列名。

BASIC

指定輸出計(jì)劃的基礎(chǔ)信息,如算子 ID、算子名稱、所引用的表名。

OUTLINE

指定輸出的計(jì)劃信息包含 outline 信息。

EXTENDED

EXPLAIN 產(chǎn)生附加信息,包括:每個(gè)算子的輸入列和輸出列,訪問(wèn)表的分區(qū)信息,當(dāng)前使用的 filter 信息,如果當(dāng)前算子使用了索引,顯示所使用的索引列及抽取的 query range。

EXTENDED_NOADDR

以簡(jiǎn)約的方式展示附加信息。

PARTITIONS

顯示分區(qū)相關(guān)信息。

FORMAT = {TRADITIONAL| JSON}

指定 EXPALIN 的輸出格式:

  • TRADITIONAL:表格輸出格式

  • JSON:KEY:VALUE 輸出格式,JSON 顯示為JSON 字符串,包括 EXTENDED 和 PARTITIONS 信息。

示例

  • 省略 explain_type
OceanBase(admin@test)>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
OceanBase(admin@test)>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 格式
OceanBase(admin@test)>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  |
=======================================

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)
  • JSON 格式
OceanBase(admin@test)>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"
    ]
  }
}

EXPLAIN 的每個(gè)輸出行提供一個(gè)表的相關(guān)信息,并且每個(gè)行包括下面的列:

列名

說(shuō)明

ID

計(jì)劃執(zhí)行序列號(hào)。

OPERATOR

執(zhí)行算子。

NAME

算子所引用的表。

EST.ROWS

估計(jì)執(zhí)行到當(dāng)前算子輸出的行數(shù)。

COST

執(zhí)行到當(dāng)前算子的 CPU 時(shí)間。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)