创建索引 - Amazon DynamoDB
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

创建索引

将 SQL 中的 CREATE INDEX 语句与 Amazon DynamoDB 中的 UpdateTable 操作进行比较。

主题

SQL

在关系数据库中,索引是一个数据结构,可让您对表中的不同的列执行快速查询。您可以使用 CREATE INDEX SQL 语句将索引添加到现有表,并指定要建立索引的列。在创建索引后,您可以照常查询表中的数据,但现在数据库可使用索引快速查找表中的指定行,而不是扫描整个表。

在创建一个索引后,数据库将为您维护此索引。只要您修改表中的数据,就会自动更改索引以反映表中的更改。

在 MySQL 中,您可以创建如下所示的索引。

CREATE INDEX GenreAndPriceIndex ON Music (genre, price);

DynamoDB

在 DynamoDB 中,您可以创建和使用二级索引 来实现类似目的。

DynamoDB 中的索引与其关系对应项不同。当您创建二级索引时,必须指定其键属性 — 分区键和排序键。创建 二级索引 后,您可以对它执行 QueryScan 操作,就如同对表执行这些操作一样。DynamoDB 没有查询优化程序,因此,仅当对其执行 QueryScan 操作时,使用 二级索引。

DynamoDB 支持两种不同的索引:

  • 全局二级索引 – 索引的主键可以是其表中的任意两个属性。

  • 本地二级索引 – 索引的分区键必须与其表的分区键相同。不过,排序键可以是任何其他属性。

DynamoDB 确保二级索引中的数据最终与其表保持一致。您可以请求对表或local secondary index执行强一致性 QueryScan 操作。但是,全局二级索引仅支持最终一致性。

可使用 UpdateTable 操作并指定 GlobalSecondaryIndexUpdates 来将全局二级索引添加到现有表。

{ TableName: "Music", AttributeDefinitions:[ {AttributeName: "Genre", AttributeType: "S"}, {AttributeName: "Price", AttributeType: "N"} ], GlobalSecondaryIndexUpdates: [ { Create: { IndexName: "GenreAndPriceIndex", KeySchema: [ {AttributeName: "Genre", KeyType: "HASH"}, //Partition key {AttributeName: "Price", KeyType: "RANGE"}, //Sort key ], Projection: { "ProjectionType": "ALL" }, ProvisionedThroughput: { // Only specified if using provisioned mode "ReadCapacityUnits": 1,"WriteCapacityUnits": 1 } } } ] }

您必须向 UpdateTable 提供以下参数:

  • TableName – 索引将关联到的表。

  • AttributeDefinitions – 索引的键架构属性的数据类型。

  • GlobalSecondaryIndexUpdates – 有关要创建的索引的详细信息:

    • IndexName – 索引的名称。

    • KeySchema – 用于索引主键的属性。

    • Projection – 表中要复制到索引的属性。在此情况下,ALL 意味着复制所有属性。

    • ProvisionedThroughput (for provisioned tables) – 每秒需对此索引执行的读取和写入次数。(它与表的预置吞吐量设置是分开的。)

在此操作中,会将表中的数据回填到新索引。在回填期间,表保持可用。但索引未准备就绪,直至其 Backfilling 属性从 true 变为 false。您可以使用 DescribeTable 操作查看此属性。

注意

有关使用 UpdateTable 的代码示例,请参阅开始使用 DynamoDB 和 AWS 开发工具包