Query by partition key in DynamoDB - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When we ask DynamoDB to find items by their partition key, we want to know how the time it takes changes as the data grows.
We are trying to see how fast or slow the query runs when there are more items in the table.
Analyze the time complexity of the following code snippet.
const params = {
TableName: "Users",
KeyConditionExpression: "UserId = :uid",
ExpressionAttributeValues: {
":uid": { S: "123" }
}
};
const data = await dynamodb.query(params).promise();
This code asks DynamoDB to find all items where the partition key UserId equals "123".
Identify the loops, recursion, array traversals that repeat.
- Primary operation: DynamoDB looks up the partition key index to find matching items.
- How many times: It reads only the items with the matching partition key, no full table scan.
As the number of items with the same partition key grows, the query reads more items.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Reads about 10 items |
| 100 | Reads about 100 items |
| 1000 | Reads about 1000 items |
Pattern observation: The time grows roughly in direct proportion to how many items share the partition key.
Time Complexity: O(n)
This means the time to get results grows linearly with the number of items that have the same partition key.
[X] Wrong: "Querying by partition key always takes the same time no matter how many items match."
[OK] Correct: The query is fast because it uses the index, but if many items share the partition key, DynamoDB must read each one, so time grows with that number.
Understanding how DynamoDB queries scale helps you explain how to design tables for fast lookups and predict performance as data grows.
"What if we added a sort key and queried by both partition and sort key? How would the time complexity change?"
Practice
Solution
Step 1: Understand partition key role
The partition key uniquely identifies the partition where items are stored.Step 2: Query by partition key fetches items
Querying by partition key returns all items that share that key value.Final Answer:
Fetches all items with the same partition key value -> Option CQuick Check:
Query by partition key = fetch items [OK]
- Thinking it deletes or updates items
- Confusing partition key with sort key
- Assuming it creates new items
Solution
Step 1: Identify correct query syntax
DynamoDB requires KeyConditionExpression with placeholders and ExpressionAttributeValues.Step 2: Check each option
Table.query(KeyConditionExpression: 'UserID = :val', ExpressionAttributeValues: {':val': '123'}) uses correct syntax with placeholder ':val' and value mapping. Others misuse operators or omit placeholders.Final Answer:
Table.query(KeyConditionExpression: 'UserID = :val', ExpressionAttributeValues: {':val': '123'}) -> Option BQuick Check:
Use placeholders and ExpressionAttributeValues [OK]
- Using '==' instead of '=' in KeyConditionExpression
- Not using ExpressionAttributeValues for values
- Using FilterExpression instead of KeyConditionExpression
Solution
Step 1: Identify items with partition key '123'
Items with UserID '123' are Alice and Bob.Step 2: Query returns all matching items
Query returns both Alice and Bob items as they share the partition key.Final Answer:
[{UserID: '123', Name: 'Alice'}, {UserID: '123', Name: 'Bob'}] -> Option AQuick Check:
Query by '123' returns Alice and Bob [OK]
- Expecting only one item returned
- Confusing partition key with sort key filtering
- Assuming query returns items with different partition keys
Table.query(KeyConditionExpression: 'OrderID = 789'). It returns an error. What is the problem?Solution
Step 1: Check query syntax requirements
DynamoDB requires placeholders and ExpressionAttributeValues for values in KeyConditionExpression.Step 2: Identify missing part
The query uses 'OrderID = 789' directly without placeholder or ExpressionAttributeValues, causing error.Final Answer:
Missing ExpressionAttributeValues for the value '789' -> Option DQuick Check:
Use placeholders and ExpressionAttributeValues [OK]
- Using raw values instead of placeholders
- Assuming case-insensitivity for partition key
- Using '==' operator instead of '='
Solution
Step 1: Understand query conditions
KeyConditionExpression must include partition key equality and supports sort key conditions like <. FilterExpression filters results after the query.Step 2: Analyze options
Use KeyConditionExpression: 'Category = :cat AND Price < :price' with ExpressionAttributeValues {':cat': 'Books', ':price': 20} correctly uses KeyConditionExpression: 'Category = :cat AND Price < :price', which efficiently queries the partition with a sort key range condition. Use KeyConditionExpression: 'Category = :cat' and FilterExpression: 'Price < :price' with ExpressionAttributeValues {':cat': 'Books', ':price': 20} uses FilterExpression for Price (valid but less efficient). B lacks KeyConditionExpression. D omits partition key from KeyConditionExpression.Final Answer:
Use KeyConditionExpression: 'Category = :cat AND Price < :price' with ExpressionAttributeValues {':cat': 'Books', ':price': 20} -> Option AQuick Check:
KeyConditionExpression: partition = AND sort < [OK]
- Using FilterExpression for partition key
- Using FilterExpression instead of KeyConditionExpression for sort key range
- Mixing KeyConditionExpression and FilterExpression incorrectly
