Skip to content

Commit 8f9710b

Browse files
hfxsdti-chi-bot
authored andcommitted
This is an automated cherry-pick of pingcap#20855
Signed-off-by: ti-chi-bot <[email protected]>
1 parent cb3c595 commit 8f9710b

17 files changed

+343
-17
lines changed

TOC.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -981,6 +981,7 @@
981981
- [下推到 TiKV 的表达式列表](/functions-and-operators/expressions-pushed-down.md)
982982
- [Oracle 与 TiDB 函数和语法差异对照](/oracle-functions-to-tidb.md)
983983
- [聚簇索引](/clustered-indexes.md)
984+
- [全局索引](/global-indexes.md)
984985
- [向量索引](/vector-search/vector-search-index.md)
985986
- [约束](/constraints.md)
986987
- [生成列](/generated-columns.md)

basic-features.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ summary: 了解 TiDB 的功能概览。
6363
| [多值索引](/sql-statements/sql-statement-create-index.md#多值索引) | Y | Y | Y | Y | N | N | N |
6464
| [外键约束](/foreign-key.md) | Y | E | E | E | N | N | N |
6565
| [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md) | Y | Y | Y | Y | N | N | N |
66-
| [全局索引 (Global Index)](/partitioned-table.md#全局索引) | Y | N | N | N | N | N | N |
66+
| [全局索引 (Global Index)](/global-indexes.md) | Y | N | N | N | N | N | N |
6767
| [向量索引](/vector-search/vector-search-index.md) | E | N | N | N | N | N | N |
6868

6969
## SQL 语句
@@ -171,7 +171,7 @@ summary: 了解 TiDB 的功能概览。
171171
| [Range INTERVAL 分区](/partitioned-table.md#range-interval-分区) | Y | Y | Y | Y | E | N | N |
172172
| [分区表转换为非分区表](/partitioned-table.md#将分区表转换为非分区表) | Y | Y | Y | N | N | N | N |
173173
| [对现有表进行分区](/partitioned-table.md#对现有表进行分区) | Y | Y | Y | N | N | N | N |
174-
| [全局索引 (Global Index)](/partitioned-table.md#全局索引) | Y | N | N | N | N | N | N |
174+
| [全局索引 (Global Index)](/global-indexes.md) | Y | N | N | N | N | N | N |
175175

176176
## 统计信息
177177

best-practices/tidb-best-practices.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ TiDB 支持完整的二级索引,并且是全局索引,很多查询可以通
8383

8484
+ 通过索引查询和直接扫描 Table 的区别
8585

86-
TiDB 实现了全局索引,所以索引和 Table 中的数据并不一定在一个数据分片上。通过索引查询的时候,需要先扫描索引,得到对应的行 ID,然后通过行 ID 去取数据,所以可能会涉及到两次网络请求,会有一定的性能开销。
86+
TiDB 实现了[全局索引](/global-indexes.md),所以索引和 Table 中的数据并不一定在一个数据分片上。通过索引查询的时候,需要先扫描索引,得到对应的行 ID,然后通过行 ID 去取数据,所以可能会涉及到两次网络请求,会有一定的性能开销。
8787

8888
如果查询涉及到大量的行,那么扫描索引是并发进行,只要第一批结果已经返回,就可以开始去取 Table 的数据,所以这里是一个并行 + Pipeline 的模式,虽然有两次访问的开销,但是延迟并不会很大。
8989

choose-index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ Skyline-Pruning 是一个针对索引的启发式过滤规则,能降低错误
8181

8282
- 选择该索引是否能满足一定的顺序。因为索引的读取可以保证某些列集合的顺序,所以满足查询要求顺序的索引在这个维度上优于不满足的索引。
8383

84-
- 该索引是否为[全局索引](/partitioned-table.md#全局索引)。在分区表中,全局索引相比普通索引能有效的降低一个 SQL 的 cop task 数量,进而提升整体性能。
84+
- 该索引是否为[全局索引](/global-indexes.md)。在分区表中,全局索引相比普通索引能有效的降低一个 SQL 的 cop task 数量,进而提升整体性能。
8585

8686
对于上述维度,如果索引 `idx_a` 在这四个维度上都不比 `idx_b` 差,且有一个维度比 `idx_b` 好,那么 TiDB 会优先选择 `idx_a`。在执行 `EXPLAIN FORMAT = 'verbose' ...` 语句时,如果 Skyline-Pruning 排除了某些索引,TiDB 会输出一条 NOTE 级别的 warning 提示哪些索引在 Skyline-Pruning 排除之后保留下来。
8787

global-indexes.md

Lines changed: 321 additions & 0 deletions
Large diffs are not rendered by default.

media/global-index-mechanism.png

228 KB
Loading
21.2 KB
Loading

partitioned-table.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1175,7 +1175,7 @@ ALTER TABLE member_level PARTITION BY RANGE(level)
11751175
PARTITION pMax VALUES LESS THAN (MAXVALUE));
11761176
```
11771177

1178-
对普通表进行分区或者对分区表进行重新分区时,可以根据需要将索引更新为全局索引或普通索引
1178+
对普通表进行分区或者对分区表进行重新分区时,可以根据需要将索引更新为[全局索引](/global-indexes.md)或普通索引
11791179

11801180
```sql
11811181
CREATE TABLE t1 (
@@ -1473,7 +1473,7 @@ SELECT store_id, COUNT(department_id) AS c
14731473

14741474
> **注意:**
14751475
>
1476-
> 使用[全局索引](#全局索引)时,可以忽略该规则。
1476+
> 使用[全局索引](/global-indexes.md)时,可以忽略该规则。
14771477
14781478
这里所指的唯一也包含了主键,因为根据主键的定义,主键必须是唯一的。例如,下面这些建表语句就是无效的:
14791479

@@ -1686,6 +1686,7 @@ ERROR 8264 (HY000): Global Index is needed for index 'a', since the unique index
16861686

16871687
### 全局索引
16881688

1689+
<<<<<<< HEAD
16891690
在引入全局索引 (Global Index) 之前,TiDB 会为每个分区创建一个局部索引 (Local Index),即一个分区对应一个局部索引。这种索引方式存在一个[使用限制](#分区键主键和唯一键):主键和唯一键必须包含所有的分区键,以确保数据的全局唯一性。此外,当查询的数据跨越多个分区时,TiDB 需要扫描各个分区的数据才能返回结果。
16901691

16911692
为解决这些问题,TiDB 从 v8.3.0 开始引入全局索引。全局索引能覆盖整个表的数据,使得主键和唯一键在不包含分区键的情况下仍能保持全局唯一性。此外,全局索引可以在一次操作中访问多个分区的索引数据,而无需对每个分区的局部索引逐一查找,显著提升了针对非分区键的查询性能。从 v8.5.4 开始,非唯一索引也可以创建为全局索引。
@@ -1783,6 +1784,9 @@ ALTER TABLE t1 PARTITION BY HASH (col1) PARTITIONS 3 UPDATE INDEXES (uidx12 LOCA
17831784
- 包含全局索引的表不支持 `EXCHANGE PARTITION`
17841785
- 默认情况下,分区表的主键为聚簇索引,且必须包含分区键。如果要求主键不包含分区建,可以在建表时显式指定主键为非聚簇的全局索引,例如:`PRIMARY KEY(col1, col2) NONCLUSTERED GLOBAL`
17851786
- 如果在表达式列上添加了全局索引,或者一个全局索引同时也是前缀索引(如 `UNIQUE KEY idx_id_prefix (id(10)) GLOBAL`),你需要为该全局索引手动收集统计信息。
1787+
=======
1788+
关于全局索引的详细介绍,参见[全局索引](/global-indexes.md)
1789+
>>>>>>> c9c2c4ea8a (sql: make global indexes a new doc and add more contents (#20855))
17861790
17871791
### 关于函数的分区限制
17881792

placement-rules-in-sql.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ PARTITION BY RANGE( YEAR(purchased) ) (
295295
);
296296
```
297297

298-
如果没有为表中的某个分区指定任何放置策略,该分区将尝试继承表上可能存在的策略。如果该表有[全局索引](/partitioned-table.md#全局索引),索引将应用与该表相同的放置策略。在上面示例中:
298+
如果没有为表中的某个分区指定任何放置策略,该分区将尝试继承表上可能存在的策略。如果该表有[全局索引](/global-indexes.md),索引将应用与该表相同的放置策略。在上面示例中:
299299

300300
- `p0` 分区将会应用 `storageforhistorydata` 策略
301301
- `p4` 分区将会应用 `storagefornewdata` 策略

releases/release-8.3.0.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ TiDB 版本:8.3.0
119119

120120
从 v8.3.0 开始,全局索引作为实验特性正式发布。你可通过关键字 `Global` 为分区表显式创建一个全局索引,从而去除分区表唯一建必须包含分区表达式中用到的所有列的限制,满足灵活的业务需求。同时基于全局索引也提升了非分区列的查询性能。
121121

122-
更多信息,请参考[用户文档](/partitioned-table.md#全局索引)
122+
更多信息,请参考[用户文档](/global-indexes.md)
123123

124124
### 稳定性
125125

0 commit comments

Comments
 (0)