DynamoDB支持两种 secondary index:
Global secondary index - partition key和sort key可以和原表不同,它的WCU和RCU单独进行设置Local secondary index - partition key和原表相同, sort key和原表不同。之所以叫"Local”, 是因为它的partition key必须和原表相同。而且LSI与原表共享WCU和LCU通常更建议使用GSI。但LSI支持查询的强一致性,GSI不支持,GSI只支持查询的最终一致性
应用会根据表的主键(primary key)进行查询,但是有时也需要用其他sort key进行查询。为了让应用能根据其他sort key来查询,可以创建一个或多个LSI(local secondary index),然后使用Query或Scan来对这些索引进行查询
例如game table的partition key和sort key分别是user_id和game_id,如果想根据user_id + game_ts来查询,则创建一个LSI:

进入DynamoDB服务,点击Create Table。partition key和sort key分别是user_id和game_id, 并选择Customize settings:

点击Create local index:

将game_ts设置为Sort key,并点击Create index:

最后点击Create table,完成表的创建。
创建完成后,在Indexes页面查看到LSI列表及信息:

在查询时,能够根据LSI查询:

1.LSI必须在建表的时候指定,建表完成后就不能进行添加了
2.一个表最多有5个LSI
应用有时要根据不同的字段进行查询,GSI可以支持这些查询
GSI = Partition key + optional sort key
相当于另一张新表
创建时必须指定WCU/RCU
可以动态的更改/增加。和LSI不一样。

尽量减少index数量,以减少额外的存储和IO花费
小心选择projection(影射),因为secondary index会占用额外空间。根据查询时需要的属性来选择