了解全局二级索引的基本概念和注意事项。

基本概念

名词 描述
索引表 对数据表中某些列数据的索引。

索引表只能用于读取数据,不能写入数据。

预定义列 在创建数据表时预先定义一些非主键列以及其类型,作为索引表属性列。
说明 表格存储为Schema-free模型,原则上一行数据时可以写入任意属性列,无需在SCHEMA中指定属性列。
单列索引 只为某一列建立索引。
组合索引 多个列组合成索引,组合索引中包含组合索引列1、列2。
索引表属性列 被映射到索引表中的预定义列。
索引列补齐 系统自动将未出现在索引列中的数据表主键补齐到索引表主键中。

注意事项

创建索引表时的注意事项如下:
  • 一个实例中最多能创建64个表,包括数据表和索引表。一个实例中的表名称不能重复。
  • 一个数据表中最多能创建15个预定义列。当超出预定义列数目限制后,创建数据表会失败。
  • 一个数据表中最多能创建5张索引表。当超出索引表数目限制后,创建索引表会失败。
  • 全局二级索引不支持TTL功能,即不能对设置了TTL的数据表创建索引表。如果有需求请使用钉钉联系表格存储技术支持。
  • 全局二级索引不支持数据多版本功能,即不能对设置了数据多版本的数据表创建索引表。

    如果数据表设置了数据多版本,则创建索引表会失败;如果数据表带有索引表,则数据表设置数据多版本会失败。

  • 一个索引表最多可以有4个索引列和8个属性列。当超过数目限制后,创建索引表会失败。
索引表的索引列和属性列设置注意事项如下:
  • 索引列为数据表主键和预定义列的任意组合。索引列的类型为整型、字符串和二进制,与数据表主键列的约束相同。
  • 索引表属性列为数据表的预定义列的组合。类型为字符串或二进制的列,作为索引表属性列时,限制与数据表相同。
  • 系统会自动对索引表进行索引列补齐。在对索引表进行扫描时,请注意填充对应主键列的范围(一般为负无穷到正无穷)。
    在创建索引表时,只需要指定索引列,其它列会由系统自动添加。例如数据表有PK0和PK1两列主键,Defined0作为预定义列。
    • 如果在Defined0上创建索引,则生成的索引表主键会是Defined0、PK0、PK1三列。
    • 如果在Defined0和PK1上创建索引,则生成的索引表主键会是Defined0、PK1、PK0三列。
    • 如果在PK1上创建索引,则生成的索引表主键会是PK1、PK0两列。
  • 根据查询模式和成本的考虑选择合适的数据表预定义列作为索引表属性列。

    将数据表的一个预定义列作为索引表的属性列后,查询数据时无需反查数据表即可得到该列的值,但是同时增加了相应的存储成本。反之则需要根据索引表反查数据表。

  • 多个列组合成索引时,大小限制与数据表主键列相同。
  • 主键自增列不能作为索引表的第一个主键列。
  • 由于可能导致索引表更新速度变慢,不建议把时间相关列作为索引表主键的第一列。

    建议将时间列进行哈希,然后在哈希后的列上创建索引,如果有需求请使用钉钉联系表格存储技术支持。

  • 由于会导致索引表水平扩展能力受限,影响索引表写入性能,不建议将取值范围非常小,甚至可枚举的列作为索引表主键的第一列,例如性别。
使用索引表时的注意事项如下:
  • 在带有索引表的数据表中写入数据时需遵循如下规则,否则在数据表中写入数据会失败。
    • 写入数据时,不能自定义数据的版本号。
    • 批量写入数据时,一个批量写请求中,同一行数据(即主键相同)不能重复存在。
  • 查询索引表时不会自动反查数据表,如有需要请自行反查数据表。
  • 在索引表上不能使用Stream功能。