Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sql-stmt: update synopsis to ebnf diagrams for 6 statements #17211

Merged
merged 3 commits into from
May 8, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 9 additions & 14 deletions sql-statements/sql-statement-show-create-table.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,10 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-show-create-table/','/docs-

## 语法图

**ShowCreateTableStmt:**

![ShowCreateTableStmt](/media/sqlgram/ShowCreateTableStmt.png)

**TableName:**

![TableName](/media/sqlgram/TableName.png)
```ebnf+diagram
ShowCreateTableStmt ::=
"SHOW" "CREATE" "TABLE" (SchemaName ".")? TableName
```

## 示例

Expand All @@ -33,17 +30,15 @@ Query OK, 0 rows affected (0.12 sec)
{{< copyable "sql" >}}

```sql
SHOW CREATE TABLE t1;
SHOW CREATE TABLE t1\G
```

```
+-------+------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+-------+------------------------------------------------------------------------------------------------------------+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
1 row in set (0.00 sec)
```

Expand Down
29 changes: 11 additions & 18 deletions sql-statements/sql-statement-show-indexes.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,14 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-show-indexes/','/docs-cn/de

## 语法图

**ShowIndexStmt:**
```ebnf+diagram
ShowIndexStmt ::=
"SHOW" ( "INDEX" | "INDEXES" | "KEYS" ) ("FROM" | "IN" ) TableName (("FROM" | "IN") SchemaName )? ShowLikeOrWhereOpt?

![ShowIndexStmt](/media/sqlgram/ShowIndexStmt.png)

**ShowIndexKwd:**

![ShowIndexKwd](/media/sqlgram/ShowIndexKwd.png)

**FromOrIn:**

![FromOrIn](/media/sqlgram/FromOrIn.png)

**TableName:**

![TableName](/media/sqlgram/TableName.png)

**ShowLikeOrWhereOpt:**

![ShowLikeOrWhereOpt](/media/sqlgram/ShowLikeOrWhereOpt.png)
ShowLikeOrWhere ::=
"LIKE" SimpleExpr
| "WHERE" Expression
```

## 示例

Expand Down Expand Up @@ -99,3 +88,7 @@ SHOW KEYS FROM t1;
* [SHOW CREATE TABLE](/sql-statements/sql-statement-show-create-table.md)
* [DROP INDEX](/sql-statements/sql-statement-drop-index.md)
* [CREATE INDEX](/sql-statements/sql-statement-create-index.md)
* [`information_schema.TIDB_INDEXES`](/information-schema/information-schema-tidb-indexes.md)
* [`information_schema.TIDB_INDEX_USAGE`](/information-schema/information-schema-tidb-index-usage.md)
* [`information_schema.KEY_COLUMN_USAGE`](/information-schema/information-schema-key-column-usage.md)
* [`sys.schema_unused_indexes`](/sys-schema/sys-schema-unused-indexes.md)
25 changes: 12 additions & 13 deletions sql-statements/sql-statement-show-table-next-rowid.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,17 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-show-table-next-rowid/']

`SHOW TABLE NEXT_ROW_ID` 语句用于显示用户表中某些特殊列的详情,主要包含以下几种类型:

* TiDB 创建的 `AUTO_INCREMENT` 类型列,即 `_tidb_rowid` 列
* TiDB 创建的 [`AUTO_INCREMENT`](/auto-increment.md) 类型列,即 `_tidb_rowid` 列
* 用户创建的 `AUTO_INCREMENT` 类型列
* 用户创建的 [`AUTO_RANDOM`](/auto-random.md) 类型列
* 用户创建的 [`SEQUENCE`](/sql-statements/sql-statement-create-sequence.md) 对象信息

## 语法图

**ShowTableNextRowIDStmt:**

![ShowTableNextRowIDStmt](/media/sqlgram/ShowTableNextRowIDStmt.png)

**TableName:**

![TableName](/media/sqlgram/TableName.png)
```ebnf+diagram
ShowTableNextRowIDStmt ::=
"SHOW" "TABLE" (SchemaName ".")? TableName "NEXT_ROW_ID"
```

## 示例

Expand All @@ -30,12 +27,12 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-show-table-next-rowid/']
{{< copyable "sql" >}}

```sql
create table t(a int);
CREATE TABLE t(a int);
Query OK, 0 rows affected (0.06 sec)
```

```sql
show table t next_row_id;
SHOW TABLE t NEXT_ROW_ID;
+---------+------------+-------------+--------------------+
| DB_NAME | TABLE_NAME | COLUMN_NAME | NEXT_GLOBAL_ROW_ID |
+---------+------------+-------------+--------------------+
Expand All @@ -44,16 +41,18 @@ show table t next_row_id;
1 row in set (0.00 sec)
```

下面示例中,表中写入了数据,负责写入的 TiDB Server 一次性向存储层请求了 30000 个 ID 缓存起来,NEXT_GLOBAL_ROW_ID 值为 `30001`。
下面示例中,表中写入了数据,负责写入的 TiDB Server 一次性向存储层请求了 30000 个 ID 缓存起来,NEXT_GLOBAL_ROW_ID 值为 `30001`。ID 的数量由 [`AUTO_ID_CACHE`](/auto-increment.md#auto_id_cache) 控制。

{{< copyable "sql" >}}

```sql
insert into t values (), (), ();
INSERT INTO t VALUES (), (), ();
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
```

```sql
show table t next_row_id;
SHOW TABLE t NEXT_ROW_ID;
+---------+------------+-------------+--------------------+
| DB_NAME | TABLE_NAME | COLUMN_NAME | NEXT_GLOBAL_ROW_ID |
+---------+------------+-------------+--------------------+
Expand Down
32 changes: 10 additions & 22 deletions sql-statements/sql-statement-show-table-regions.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,13 @@ SHOW TABLE [table_name] INDEX [index_name] REGIONS [WhereClauseOptional];

### 语法图

**ShowTableRegionStmt:**
```ebnf+diagram
ShowTableRegionStmt ::=
"SHOW" "TABLE" TableName PartitionNameList? ("INDEX" IndexName)? "REGIONS" ("WHERE" Expression)?

![ShowTableRegionStmt](/media/sqlgram/ShowTableRegionStmt.png)

**TableName:**

![TableName](/media/sqlgram/TableName.png)

**PartitionNameListOpt:**

![PartitionNameListOpt](/media/sqlgram/PartitionNameListOpt.png)

**WhereClauseOptional:**

![WhereClauseOptional](/media/sqlgram/WhereClauseOptional.png)

**WhereClause:**

![WhereClause](/media/sqlgram/WhereClause.png)
TableName ::=
(SchemaName ".")? Identifier
```

`SHOW TABLE REGIONS` 会返回如下列:

Expand Down Expand Up @@ -152,7 +140,7 @@ SHOW TABLE t1 REGIONS;
{{< copyable "sql" >}}

```sql
show table t regions;
SHOW TABLE t REGIONS;
```

```sql
Expand All @@ -179,7 +167,7 @@ show table t regions;
{{< copyable "sql" >}}

```sql
show table t regions where leader_store_id =1;
SHOW TABLE t REGIONS WHERE leader_store_id =1;
```

```
Expand All @@ -195,7 +183,7 @@ show table t regions where leader_store_id =1;
{{< copyable "sql" >}}

```sql
split table t index name between ("a") and ("z") regions 2;
SPLIT TABLE t INDEX name BETWEEN ("a") AND ("z") REGIONS 2;
```

```
Expand All @@ -212,7 +200,7 @@ split table t index name between ("a") and ("z") regions 2;
{{< copyable "sql" >}}

```sql
show table t regions;
SHOW TABLE t REGIONS;
```

```
Expand Down
69 changes: 31 additions & 38 deletions sql-statements/sql-statement-split-region.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,33 +14,26 @@ summary: TiDB 中的 Split Region 功能可以解决表数据超过默认 Region

## 语法图

**SplitRegionStmt:**
```ebnf+diagram
SplitRegionStmt ::=
"SPLIT" SplitSyntaxOption "TABLE" TableName PartitionNameList? ("INDEX" IndexName)? SplitOption

![SplitRegionStmt](/media/sqlgram/SplitRegionStmt.png)
SplitSyntaxOption ::=
("REGION" "FOR")? "PARTITION"?

**SplitSyntaxOption:**
TableName ::=
(SchemaName ".")? Identifier

![SplitSyntaxOption](/media/sqlgram/SplitSyntaxOption.png)
PartitionNameList ::=
"PARTITION" "(" PartitionName ("," PartitionName)* ")"

**TableName:**
SplitOption ::=
("BETWEEN" RowValue "AND" RowValue "REGIONS" NUM
| "BY" RowValue ("," RowValue)* )

![TableName](/media/sqlgram/TableName.png)

**PartitionNameListOpt:**

![PartitionNameListOpt](/media/sqlgram/PartitionNameListOpt.png)

**SplitOption:**

![SplitOption](/media/sqlgram/SplitOption.png)

**RowValue:**

![RowValue](/media/sqlgram/RowValue.png)

**Int64Num:**

![Int64Num](/media/sqlgram/Int64Num.png)
RowValue ::=
"(" ValuesOpt ")"
```

## Split Region 的使用

Expand Down Expand Up @@ -78,7 +71,7 @@ Split Region 有 2 种不同的语法,具体如下:
> **注意:**
>
> 以下会话变量会影响 `SPLIT` 语句的行为,需要特别注意:
>
>
> * `tidb_wait_split_region_finish`:打散 Region 的时间可能较长,由 PD 调度以及 TiKV 的负载情况所决定。这个变量用来设置在执行 `SPLIT REGION` 语句时,是否同步等待所有 Region 都打散完成后再返回结果给客户端。默认 `1` 代表等待打散完成后再返回结果。`0` 代表不等待 Region 打散完成就返回结果。
> * `tidb_wait_split_region_timeout`:这个变量用来设置 `SPLIT REGION` 语句的执行超时时间,单位是秒,默认值是 300 秒,如果超时还未完成 `Split` 操作,就返回一个超时错误。

Expand Down Expand Up @@ -276,15 +269,15 @@ region4 [("c", "") , maxIndexValue )
{{< copyable "sql" >}}

```sql
create table t (a int,b int,index idx(a)) partition by hash(a) partitions 2;
CREATE TABLE t (a INT, b INT, INDEX idx(a)) PARTITION BY HASH(a) PARTITIONS 2;
```

此时建完表后会为每个 partition 都单独 split 一个 Region,用 `SHOW TABLE REGIONS` 语法查看该表的 Region 如下:
此时建完表后会为每个 partition 都单独 split 一个 Region,用 [`SHOW TABLE REGIONS`](/sql-statements/sql-statement-show-table-regions.md) 语法查看该表的 Region 如下:

{{< copyable "sql" >}}

```sql
show table t regions;
SHOW TABLE t REGIONS;
```

```sql
Expand All @@ -301,7 +294,7 @@ region4 [("c", "") , maxIndexValue )
{{< copyable "sql" >}}

```sql
split partition table t between (0) and (10000) regions 4;
SPLIT PARTITION TABLE t BETWEEN (0) AND (10000) REGIONS 4;
```

其中,`0` 和 `10000` 分别代表你想要打散的热点数据对应的上、下边界的 `row_id`。
Expand All @@ -315,7 +308,7 @@ region4 [("c", "") , maxIndexValue )
{{< copyable "sql" >}}

```sql
show table t regions;
SHOW TABLE t REGIONS;
```

```sql
Expand All @@ -340,7 +333,7 @@ region4 [("c", "") , maxIndexValue )
{{< copyable "sql" >}}

```sql
split partition table t index idx between (1000) and (10000) regions 2;
SPLIT PARTITION TABLE t INDEX idx BETWEEN (1000) AND (10000) REGIONS 2;
```

#### Split 单个分区的 Region 示例
Expand All @@ -352,34 +345,34 @@ region4 [("c", "") , maxIndexValue )
{{< copyable "sql" >}}

```sql
create table t ( a int, b int, index idx(b)) partition by range( a ) (
partition p1 values less than (10000),
partition p2 values less than (20000),
partition p3 values less than (MAXVALUE) );
CREATE TABLE t ( a INT, b INT, INDEX idx(b)) PARTITION BY RANGE( a ) (
PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (20000),
PARTITION p3 VALUES LESS THAN (MAXVALUE) );
```

2. 如果你要将 `p1` 分区的 [0,10000] 范围内的数据预切分 2 个 Region,示例语句如下:

{{< copyable "sql" >}}

```sql
split partition table t partition (p1) between (0) and (10000) regions 2;
SPLIT PARTITION TABLE t PARTITION (p1) BETWEEN (0) AND (10000) REGIONS 2;
```

3. 如果你要将 `p2` 分区的 [10000,20000] 范围内的数据预切分 2 个 Region,示例语句如下:

{{< copyable "sql" >}}

```sql
split partition table t partition (p2) between (10000) and (20000) regions 2;
SPLIT PARTITION TABLE t PARTITION (p2) BETWEEN (10000) AND (20000) REGIONS 2;
```

4. 用 `SHOW TABLE REGIONS` 语法查看该表的 Region 如下:

{{< copyable "sql" >}}

```sql
show table t regions;
SHOW TABLE t REGIONS;
```

```sql
Expand All @@ -399,7 +392,7 @@ region4 [("c", "") , maxIndexValue )
{{< copyable "sql" >}}

```sql
split partition table t partition (p1,p2) index idx between (0) and (20000) regions 2;
SPLIT PARTITION TABLE t PARTITION (p1,p2) INDEX idx BETWEEN (0) AND (20000) REGIONS 2;
```

## pre_split_regions
Expand All @@ -419,7 +412,7 @@ region4 [("c", "") , maxIndexValue )
{{< copyable "sql" >}}

```sql
create table t (a int, b int,index idx1(a)) shard_row_id_bits = 4 pre_split_regions=2;
CREATE TABLE t (a INT, b INT, INDEX idx1(a)) SHARD_ROW_ID_BITS = 4 PRE_SPLIT_REGIONS=2;
```

该语句在建表后,会对这个表 t 预切分出 4 + 1 个 Region。4 (2^2) 个 Region 是用来存 table 的行数据的,1 个 Region 是用来存 idx1 索引的数据。
Expand Down
Loading
Loading