Amazon DynamoDB
開発者ガイド (API バージョン 2012-08-10)

インデックスのクエリの実行およびスキャン

SQL

リレーショナルデータベースでは、インデックスを直接使用しません。代わりに、SELECT ステートメントの発行により、テーブルでクエリを実行し、クエリオプティマイザは任意のインデックスを利用できます。

クエリオプティマイザは、使用できるインデックスを評価し、クエリを高速化するためにそれらを使用できるかを決定するリレーショナルデータベース管理システム (RDBMS) のコンポーネントです。クエリを高速化するためにインデックスが使用できる場合、RDBMS は最初にインデックスにアクセスし、それを使用してテーブルのデータを特定します。

GenreAndPriceIndex を使用してパフォーマンスを向上できる SQL ステートメントを次に示します。ここでは、Music テーブルに十分なデータがあり、クエリオプティマイザが、テーブル全体にスキャンするのではなく、このインデックスを使用することを前提にします。

/* All of the rock songs */ SELECT * FROM Music WHERE Genre = 'Rock';
/* All of the cheap country songs */ SELECT Artist, SongTitle, Price FROM Music WHERE Genre = 'Country' AND Price < 0.50;

DynamoDB

DynamoDB では、テーブルで実行するのと同じように、インデックスに対して直接 Query オペレーションを実行します。TableNameIndexName の両方を指定する必要があります。

以下に、DynamoDB の GenreAndPriceIndex に対するクエリをいくつか示します。(このインデックスのキースキーマは、ジャンル価格で構成されています。)

// All of the rock songs { TableName: "Music", IndexName: "GenreAndPriceIndex", KeyConditionExpression: "Genre = :genre", ExpressionAttributeValues: { ":genre": "Rock" }, };
// All of the cheap country songs { TableName: "Music", IndexName: "GenreAndPriceIndex", KeyConditionExpression: "Genre = :genre and Price < :price", ExpressionAttributeValues: { ":genre": "Country", ":price": 0.50 }, ProjectionExpression: "Artist, SongTitle, Price" };

この例では ProjectionExpression を使用して、属性すべてではなく、一部のみを結果に表示することを示します。

また、テーブルで実行するのと同じように、セカンダリインデックス で Scan オペレーションを実行できます。次に示すのは、GenreAndPriceIndex に対するスキャンです。

// Return all of the data in the index { TableName: "Music", IndexName: "GenreAndPriceIndex" }

このページの内容: