你正在查看 TiDB 数据库的归档文档,归档文档不再提供任何更新。如无特殊需求,建议使用 TiDB 数据库的最新 LTS 版本。

当前该功能为实验特性,不建议在生产环境中使用。

为了在功能上兼容 MySQL 5.7,TiDB 支持生成列 (generated column)。生成列的主要的作用之一:从 JSON 数据类型中解出数据,并为该数据建立索引。

MySQL 5.7 及 TiDB 都不能直接为 JSON 类型的列添加索引,即不支持如下表结构:

为 JSON 列添加索引之前,首先必须抽取该列为 generated column。

该表中,city 列是一个 generated stored column。顾名思义,此列由该表的其他列生成,对此列进行插入或更新操作时,并不能对之赋值。此列按其定义的表达式生成,并存储在数据库中,这样在读取此列时,就可以直接读取,不用再读取其依赖的 address_info 列后再计算得到。city 列的索引存储在数据库中,并使用和 varchar(64) 类的其他索引相同的结构。

可使用 generated stored column 的索引,以提高如下语句的执行速度:

INSERT 和 UPDATE 语句都会检查 virtual column 的定义。未通过有效性检测的行会返回错误:

TiDB 也支持 generated virtual column,和 generated store column 不同的是,此列按需生成,并不存储在数据库中,也不占用内存空间,因而是虚拟的。