인덱스 쿼리 및 스캔
Amazon DynamoDB의 Query
및 Scan
작업과 SQL의 SELECT 문을 사용한 인덱스 쿼리 및 스캔을 비교합니다.
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
및 Scan
작업을 수행합니다. DynamoDB API 또는 PartiQL(SQL 호환 쿼리 언어)을 사용하여 인덱스를 쿼리하거나 스캔할 수 있습니다. TableName
과 IndexName
을 모두 지정해야 합니다.
다음은 DynamoDB의 GenreAndPriceIndex에 대한 몇 가지 쿼리입니다. (이 인덱스의 키 스키마는 Genre와 Price로 구성됩니다.)
- DynamoDB API
-
// All of the rock songs
{
TableName: "Music",
IndexName: "GenreAndPriceIndex",
KeyConditionExpression: "Genre = :genre",
ExpressionAttributeValues: {
":genre": "Rock"
},
};
이 예제에서는 속성 전부가 아니라 일부만 결과에 표시하려 한다는 것을 나타내기 위해 ProjectionExpression
을 사용합니다.
// 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"
};
다음은 GenreAndPriceIndex에서의 스캔입니다.
// Return all of the data in the index
{
TableName: "Music",
IndexName: "GenreAndPriceIndex"
}
- PartiQL for DynamoDB
-
PartiQL에서는 PartiQL Select
문을 사용하여 인덱스에 대한 쿼리 및 스캔을 수행합니다.
// All of the rock songs
SELECT *
FROM Music.GenreAndPriceIndex
WHERE Genre = 'Rock'
// All of the cheap country songs
SELECT *
FROM Music.GenreAndPriceIndex
WHERE Genre = 'Rock' AND Price < 0.50
다음은 GenreAndPriceIndex에서의 스캔입니다.
// Return all of the data in the index
SELECT *
FROM Music.GenreAndPriceIndex