本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立索引
將中的CREATE INDEX
陳述式SQL與 Amazon DynamoDB 中的UpdateTable
作業進行比較。
建立索引 SQL
在關聯式資料庫中,索引是一種資料結構,可讓您快速查詢資料表中的不同資料行。您可以使用CREATE
INDEX
SQL陳述式將索引新增至現有資料表,並指定要建立索引的資料行。在索引建立後,您可以如常地查詢資料表中的資料,但資料庫現在已可使用索引在快速尋找資料表中的指定資料列,而不用掃描整個資料表。
在您建立索引後,資料庫會為您維護。每當您修改資料表中的資料時,索引就會自動修改,以反映資料表的變更。
在「我」中SQL,您將創建如下所示的索引。
CREATE INDEX GenreAndPriceIndex ON Music (genre, price);
在 DynamoDB 中建立索引
在 DynamoDB 中,您可以建立及使用次要索引來達到類似目的。
DynamoDB 中的索引與關聯式資料庫中的索引不同。在您建立次要索引時,必須指定其索引鍵屬性,即一個分割區索引鍵和一個排序索引鍵。在建立次要索引後,您便可以 Query
或 Scan
該索引,正如您對資料表所做的那樣。DynamoDB 沒有查詢最佳化程式,因此只有在您 Query
或 Scan
次要索引時才會使用此類索引。
DynamoDB 支援兩種不同的索引:
-
全域次要索引:索引的主索引鍵可以是資料表中任兩個屬性。
-
本機次要索引:索引的分割區索引鍵必須與資料表的分割區索引鍵相同。但是,排序索引鍵可以是其他任何屬性。
DynamoDB 會確認次要索引中的資料最終與其資料表一致。您可以對資料表或本機次要索引請求高度一致的 Query
或 Scan
操作。但是,全域次要索引只支援最終一致性。
您可以使用 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
操作來檢視此屬性。