本文为您介绍全局二级索引的基本概念、使用限制以及注意事项。

基本概念

名词 描述
索引表 对主表某些列数据的索引,只能读不能写。
预定义列 表格存储为Schema-free模型,原则上一行数据可以写入任意列,无需在schema中指定。但是也可以在建表时预先定义一些列以及其类型。
单列索引 只为某一个列建立索引。
组合索引 多个列组合成索引,组合索引中包含组合索引列1,列2。
索引表属性列 被映射到索引表非PK列中的主表预定义列。
索引列补齐 自动将没有出现在用户指定索引列中的主表PK列补充到索引表PK中。

限制

  • 同一实例下,索引表名称不允许重复。
  • 同一张主表下,最多建立5张索引表。(超出索引表数目限制后,新建索引表将失败)
  • 同一张主表下,最多建立15个预定义列。(超出预定义列数目限制后,建主表将失败)
  • 对于一张索引表,其索引列最多有4列。(为主表PK以及主表预定义列的任意组合,超出限制后,建表将会失败)
  • 对于一张索引表,其属性列最多有8列。(超出限制后,建表将会失败)
  • 索引列的类型为整型、字符串、二进制,与主表PK列的约束相同。
  • 多个列组合成索引,大小限制与主表PK列相同。
  • 类型为字符串或二进制的列,作为索引表的属性列时,限制与主表相同。
  • 暂不支持TTL表建立索引,有需求请钉钉联系表格存储技术支持。
  • 不支持在使用多版本功能的表上建立索引。(如果表打开了多版本,建索引会失败;如果有索引,打开主表多版本功能会失败)
  • 有索引的主表上,写入数据时,不允许自定义版本。(否则主表写将会失败)
  • 索引表上不允许使用Stream功能。
  • 有索引表的主表上,同一个Batch写中,同一行(主键相同)不允许重复存在。(否则主表写将会失败)

注意事项

  • 对于每张索引表,系统会自动进行索引列补齐。在对索引表进行扫描时,您需要注意填充对应PK列的范围(一般为负无穷到正无穷)。例如:主表有PK0PK1两列PK,Defined0一列预定义列。

    如果您指定在Defined0列上建立索引,则系统会将索引表的PK生成为Defined0PK0PK1。您可以指定在Defined0列及PK1列上建立索引,则生成索引表的PK为Defined0PK1PK0。您还可以在PK列上建立索引,则生成索引表的PK为PK1PK0。您在建立索引表时,只需要指定您需要的索引列,其它列会由系统自动添加。例如主表有PK0、PK1两列PK,Defined0作为预定义列:

    • 如果在Defined0上建立索引,那么生成的索引表PK将会是Defined0、PK0、PK1三列。
    • 如果在PK1上建立索引,那么生成的索引表PK将会是PK1、 PK0两列。
  • 选择主表的哪些预定义列作为主表的属性列。将主表的一列预定义列作为索引表的属性列后,查询时不用反查主表即可得到该列的值,但是同时增加了相应的存储成本。反之则需要根据索引表反查主表。您可以根据您的查询模式以及成本的考虑,作出相应的选择。
  • 不建议把时间相关列作为索引表PK的第一列,这样可能导致索引表更新速度变慢。建议将时间列进行哈希,然后在哈希后的列上建立索引,如果有类似需求可以钉钉联系表格存储技术支持一同讨论表结构。
  • 不建议取值范围非常小,甚至可枚举的列作为索引表PK的第一列。例如性别,这样将导致索引表水平扩展能力受限,从而影响索引表写入性能。