DynamoDB 支持两种类型的二级索引:
-
Global secondary index — 其分区键和排序键可以与基表上的分区键和排序键不同的索引。全局二级索引被视为“全局”,是因为对索引执行的查询可以跨基表中所有分区的所有数据。
-
本地二级索引 — 分区键与基表相同、但排序键不同的索引。local secondary index的含义是“本地”,表示local secondary index的每个分区的范围都将限定为具有相同分区键值的基表分区。
在确定要使用的索引类型时,应考虑应用程序的要求。下表显示全局二级索引与local secondary index的主要差异。
特征 | 全局二级索引 | 本地二级索引 |
---|---|---|
键架构 | 全局二级索引的主键可以是简单主键(分区键)或复合主键(分区键和排序键)。 | local secondary index的主键必须是复合主键(分区键和排序键)。 |
键属性 | 索引分区键和排序键 (如果有) 可以是字符串、数字或二进制类型的任何基表属性。 | 索引的分区键是与基表的分区键相同的属性。排序键可以是字符串、数字或二进制类型的任何基表属性。 |
每个分区键值的大小限制 | 全局二级索引没有大小限制。 | 对于每个分区键值,所有索引项目的大小总和必须为 10GB 或更小。 |
在线索引操作 | 您可以在创建表时创建Global secondary index。您也可以向现有表添加新全局二级索引,或者删除现有全局二级索引。有关更多信息,请参阅管理全局二级索引。 | 本地二级索引是在创建表的同时创建的。您不能向现有表添加local secondary index,也不能删除已存在的任何local secondary index。 |
查询和分区 | 通过全局二级索引,可以跨所有分区查询整个表。 | 借助local secondary index,您可以对查询中分区键值指定的单个分区进行查询。 |
读取一致性 | 对全局二级索引进行的查询仅支持最终一致性。 | 查询local secondary index时,您可以选择最终一致性或强一致性。 |
预置吞吐量使用 | 每个全局二级索引都有自己的用于读取和写入活动的预置吞吐量设置。对全局二级索引执行的查询或扫描会占用索引 (而非基表) 的容量单位。全局二级索引更新也是如此,因为会进行表写入。 | 对local secondary index执行的查询或扫描会占用基表的读取容量单位。向表写入时,其local secondary index也会更新;这些更新会占用基表的写入容量单位。 |
投影属性 | 对于全局二级索引查询或扫描,您只能请求投影到索引的属性。DynamoDB 不会从表中获取任何属性。 | 如果您查询或扫描local secondary index,则可以请求未投影到索引的属性。DynamoDB 会自动从表中提取这些属性。 |
为获得最高的查询灵活性,您可以为每个表创建最多 20 个全局二级索引(默认限制)和最多 5 个本地二级索引。