We want to find data quickly and efficiently in DynamoDB. Understanding the difference between Scan and Query helps us choose the faster way.
When you know the exact key of the item you want to find.
When you want to get all items but only a few match your condition.
When you want to read the whole table without filtering.
When you want to save time and reduce cost by reading less data.
When you want to avoid reading unnecessary data from the database.
Syntax
DynamoDB
Query:
Use KeyConditionExpression to specify the key.
Optionally use FilterExpression to narrow results.
Scan:
Reads every item in the table.
Optionally use FilterExpression to narrow results after reading.
Query is faster because it looks only at items with matching keys.
Scan reads the whole table, so it is slower and costs more.
Examples
This finds all songs by the artist 'No One You Know' quickly using the key.
DynamoDB
Query example:
aws dynamodb query \
--table-name Music \
--key-condition-expression "Artist = :artist" \
--expression-attribute-values '{":artist":{"S":"No One You Know"}}'
This reads the whole Music table and then filters to show only Rock songs.
The Query example uses the Artist key to find matching songs fast.
The Scan example reads all songs and then filters, which takes more time.
DynamoDB
SELECT * FROM Music WHERE Artist = 'No One You Know'; -- Query example
-- This returns only songs by 'No One You Know' quickly
-- Scan example (conceptual):
-- Scan the whole Music table andfilter Genre = 'Rock'
-- This is slower and reads all items
OutputSuccess
Important Notes
Query uses the primary key or index to find data fast.
Scan reads every item, so it is slower and costs more.
Always prefer Query when you can specify the key.
Summary
Query is fast and efficient for known keys.
Scan reads the whole table and is slower.
Use Query to save time and money whenever possible.
Practice
(1/5)
1. Which DynamoDB operation is generally faster when you know the partition key of the item you want to retrieve?
easy
A. Scan
B. UpdateItem
C. Query
D. DeleteItem
Solution
Step 1: Understand Query operation
Query uses the partition key to directly find matching items, making it efficient.
Step 2: Compare with Scan operation
Scan reads the entire table, which is slower and less efficient.
Final Answer:
Query -> Option C
Quick Check:
Query is faster for known keys [OK]
Hint: Use Query when you know the partition key for speed [OK]
Common Mistakes:
Thinking Scan is faster because it reads all data
Confusing Query with Scan
Assuming UpdateItem is for reading data
2. Which of the following is the correct syntax to perform a Query operation in DynamoDB using AWS SDK for JavaScript?
Hint: Query needs KeyConditionExpression, not FilterExpression [OK]
Common Mistakes:
Using FilterExpression instead of KeyConditionExpression for Query
Using scan method with KeyConditionExpression
Confusing getItem with query syntax
3. Given a DynamoDB table with 1000 items, what will be the main difference in performance between these two operations? dynamoDbClient.scan({ TableName: 'MyTable' }) and dynamoDbClient.query({ TableName: 'MyTable', KeyConditionExpression: '#pk = :pk', ExpressionAttributeNames: { '#pk': 'PartitionKey' }, ExpressionAttributeValues: { ':pk': '123' } })
medium
A. Scan reads all 1000 items; Query reads only matching items, so Query is faster.
B. Scan is faster because it reads all items at once; Query is slower due to filtering.
C. Both operations have the same speed because they access the same table.
D. Query reads all items; Scan reads only matching items.
Solution
Step 1: Understand Scan operation
Scan reads every item in the table, so it processes all 1000 items.
Step 2: Understand Query operation
Query uses the partition key to read only matching items, which is faster.
Final Answer:
Scan reads all items; Query reads only matching items, so Query is faster. -> Option A
A. Missing ExpressionAttributeNames for reserved word PartitionKey
B. Using Scan instead of Query
C. TableName is misspelled
D. Incorrect KeyConditionExpression syntax; should use #pk = :pk
Solution
Step 1: Check KeyConditionExpression syntax
KeyConditionExpression requires placeholders for attribute names like #pk defined in ExpressionAttributeNames.
Step 2: Identify missing ExpressionAttributeNames
The code uses 'PartitionKey' directly without ExpressionAttributeNames, causing no matches.
Final Answer:
Incorrect KeyConditionExpression syntax; should use #pk = :pk -> Option D
Quick Check:
Reserved words need placeholders in KeyConditionExpression [OK]
Hint: Use placeholders for reserved words in KeyConditionExpression [OK]
Common Mistakes:
Not using ExpressionAttributeNames for reserved words
Confusing Scan and Query methods
Misspelling TableName
5. You want to retrieve all items where the attribute 'Status' equals 'Active' from a large DynamoDB table. The table's partition key is 'UserId'. Which approach is best for performance and cost?
hard
A. Use Query with KeyConditionExpression on 'UserId' and FilterExpression on 'Status' = 'Active'.
B. Create a Global Secondary Index (GSI) on 'Status' and Query the GSI for 'Active' items.
C. Use Scan with a FilterExpression on 'Status' = 'Active' to get all matching items.
D. Use Scan without any filters to get all items and then filter in application code.
Solution
Step 1: Understand limitations of Scan and Query
Scan reads entire table and is costly; Query requires partition key, but 'Status' is not the partition key.
Step 2: Use GSI for efficient querying
Creating a GSI on 'Status' allows Query on 'Status' attribute efficiently without scanning.
Final Answer:
Create a Global Secondary Index (GSI) on 'Status' and Query the GSI for 'Active' items. -> Option B
Quick Check:
GSI enables efficient queries on non-key attributes [OK]
Hint: Use GSI to query non-key attributes efficiently [OK]
Common Mistakes:
Using Scan with filters on large tables
Trying to Query without partition key
Filtering in application instead of database
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.