Skip to content

Commit

Permalink
fix some wrong statements in clustered-indexes.md (#5864)
Browse files Browse the repository at this point in the history
  • Loading branch information
tangenta authored Mar 29, 2021
1 parent 178ce75 commit 160bfc8
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions clustered-indexes.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ summary: 本文档介绍了聚簇索引的概念、使用场景、使用方法
- `NONCLUSTERED`,表示该表的主键为非聚簇索引。在非聚簇索引表中,行数据的键由 TiDB 内部隐式分配的 `_tidb_rowid` 构成,而主键本质上是唯一索引,因此非聚簇索引表存储一行至少需要两个键值对,分别为
- `_tidb_rowid`(键)- 行数据(值)
- 主键列数据(键) - `_tidb_rowid`(值)
- `CLUSTERED`,表示该表的主键为聚簇索引。在聚簇索引表中,行数据的键由用户给定的主键列数据构成,不需要用唯一索引模拟,因此聚簇索引表存储一行至少只要一个键值对,即
- `CLUSTERED`,表示该表的主键为聚簇索引。在聚簇索引表中,行数据的键由用户给定的主键列数据构成,因此聚簇索引表存储一行至少只要一个键值对,即
- 主键列数据(键) - 行数据(值)

> **注意:**
Expand All @@ -31,7 +31,7 @@ summary: 本文档介绍了聚簇索引的概念、使用场景、使用方法
另一方面,聚簇索引表也存在一定的劣势:

- 批量插入大量取值相邻的主键时,可能会产生较大的写热点问题。
- 当使用大于 64 位的数据类型作为主键时,可能导致表本身需要占用更多的存储空间。该现象在存在多个二级索引时尤为明显。
- 当使用大于 64 位的数据类型作为主键时,可能导致表数据需要占用更多的存储空间。该现象在存在多个二级索引时尤为明显。

## 使用方法

Expand Down Expand Up @@ -92,9 +92,9 @@ ALTER TABLE t DROP INDEX `PRIMARY`;

可通过以下方式来确定一张表的主键是否使用了聚簇索引:

- `SHOW CREATE TABLE`
- `SHOW INDEX FROM`
- `information_schema.tables`
- 执行语句 `SHOW CREATE TABLE`
- 执行语句 `SHOW INDEX FROM`
- 查询系统表 `information_schema.tables` 中的 `TIDB_PK_TYPE` 列。

通过 `SHOW CREATE TABLE` 查看,`PRIMARY KEY` 的属性可能为 `CLUSTERED``NONCLUSTERED`

Expand Down Expand Up @@ -141,13 +141,13 @@ mysql> SELECT TIDB_PK_TYPE FROM information_schema.tables WHERE table_schema = '
目前 TiDB 的聚簇索引具有以下两类限制:

- 明确不支持且没有支持计划的使用限制:
- 不支持与 TiDB Binlog 一起使用。开启 TiDB Binlog 后 TiDB 不允许创建非单个整数列作为主键的聚簇索引;已创建的聚簇索引表的数据插入、删除和更新动作不会通过 TiDB Binlog 同步到下游。如需同步聚簇索引表,请使用 [TiCDC](/ticdc/ticdc-overview.md)
- 不支持与 TiDB Binlog 一起使用。开启 TiDB Binlog 后 TiDB 只允许创建单个整数列作为主键的聚簇索引;已创建的聚簇索引表的数据插入、删除和更新动作不会通过 TiDB Binlog 同步到下游。如需同步聚簇索引表,请使用 [TiCDC](/ticdc/ticdc-overview.md)
- 不支持与 [`SHARD_ROW_ID_BITS`](/shard-row-id-bits.md) 一起使用;[`PRE_SPLIT_REGIONS`](/sql-statements/sql-statement-split-region.md#pre_split_regions) 在聚簇索引表上不生效。
- 不支持对聚簇索引表进行降级。如需降级,请使用逻辑备份工具迁移数据。
- 另一类是尚未支持,但未来有计划支持的使用限制:
- 尚未支持通过 `ALTER TABLE` 语句增加、删除、修改聚簇索引。

开启 TiDB Binlog 之后,创建非单个整数列作为主键的聚簇索引会报以下错误
开启 TiDB Binlog 之后,要创建的聚簇索引如果不是由单个整数列构成,会报以下错误

```sql
mysql> CREATE TABLE t (a VARCHAR(255) PRIMARY KEY CLUSTERED);
Expand All @@ -173,11 +173,11 @@ TiDB 支持对聚簇索引表的升级兼容,但不支持降级兼容,即高
- 主键只有一列
- 主键的数据类型为整数类型

TiDB v5.0 开始,不论是单整数列主键还是其他类型主键,默认均为非聚簇索引。该行为变更可能导致默认配置下的 TiDB 在某些场景中出现性能回退,此时可以考虑显式启用聚簇索引
TiDB v5.0 完成了所有类型主键的支持,但默认行为与 TiDB v3.0 和 v4.0 保持一致。要修改默认行为,请设置系统变量 `@@tidb_enable_clustered_index``ON``OFF`

### MySQL 兼容性

TiDB 支持使用可执行注释的语法来包裹 `CLUSTERED``NONCLUSTERED` 关键字,且 `SHOW CREATE TABLE` 的结果均包含 TiDB 特有的可执行注释,因此这部分 DDL 语句能被 MySQL 或低版本的 TiDB 识别并执行
TiDB 支持使用可执行注释的语法来包裹 `CLUSTERED``NONCLUSTERED` 关键字,且 `SHOW CREATE TABLE` 的结果均包含 TiDB 特有的可执行注释,这些注释在 MySQL 或低版本的 TiDB 中会被忽略

### TiDB 生态工具兼容性

Expand Down

0 comments on commit 160bfc8

Please sign in to comment.