What if you could find any piece of data instantly, no matter how you want to look for it?
Why Secondary indexes (GSI, LSI) in AWS? - Purpose & Use Cases
Imagine you have a huge phone book, but it's only sorted by last name. Now, you want to quickly find all people living in a certain city or with a specific job title. Without extra sorting, you'd have to flip through every page manually.
Manually searching through all entries is slow and tiring. It's easy to miss details or make mistakes. As the phone book grows, finding what you want takes longer and longer, making your work frustrating and inefficient.
Secondary indexes act like extra sorted lists for your data. They let you quickly find items by different keys without scanning everything. This saves time and reduces errors, making your data searches fast and reliable.
Scan entire table and filter results in code
Query using a secondary index to get results directly
Secondary indexes unlock fast, flexible queries on large datasets without slowing down your application.
A shopping app uses a secondary index to quickly find all orders by customer ID or by order date, making the app responsive and user-friendly.
Manual searches through large data are slow and error-prone.
Secondary indexes provide alternate ways to quickly find data.
They improve performance and user experience in real applications.
Practice
Solution
Step 1: Understand LSI key structure
LSI shares the same partition key as the main table but allows a different sort key.Step 2: Understand GSI key structure
GSI can have a completely different partition key and sort key from the main table.Final Answer:
LSI uses the same partition key as the main table, but GSI can use a different partition key. -> Option BQuick Check:
LSI shares partition key, GSI can differ [OK]
- Thinking LSI can have a different partition key
- Assuming GSI must use main table keys
- Confusing read/write capabilities of indexes
Solution
Step 1: Identify correct index type and key schema
GlobalSecondaryIndexes is the correct property for GSI, and the partition key must have KeyType "HASH".Step 2: Check projection type and syntax
ProjectionType "ALL" is valid and commonly used; syntax matches CloudFormation format.Final Answer:
"GlobalSecondaryIndexes": [{"IndexName": "GSI1", "KeySchema": [{"AttributeName": "UserId", "KeyType": "HASH"}], "Projection": {"ProjectionType": "ALL"}}] -> Option DQuick Check:
GSI uses GlobalSecondaryIndexes with HASH key [OK]
- Using LocalSecondaryIndexes for GSI
- Setting KeyType to RANGE for partition key
- Incorrect projection types or syntax errors
Category as partition key and Price as sort key, what will the following query return?Query on GSI where Category = 'Books' and Price between 10 and 20
Solution
Step 1: Understand GSI query conditions
Query on GSI requires specifying the partition key (Category = 'Books') and can filter by sort key range (Price between 10 and 20).Step 2: Interpret the query result
The query returns all items matching Category 'Books' with Price in the specified range.Final Answer:
All items with Category 'Books' and Price between 10 and 20 -> Option AQuick Check:
GSI query filters partition and sort keys correctly [OK]
- Ignoring partition key in query
- Thinking sort key can't be filtered
- Expecting error on valid query
Solution
Step 1: Recall LSI key requirements
LSI shares the same partition key as the main table, so queries must specify that partition key.Step 2: Analyze query behavior
If the query does not specify the partition key, no results will be returned because partition key is mandatory for queries on LSI.Final Answer:
The query did not specify the same partition key as the main table. -> Option CQuick Check:
LSI queries require main table partition key [OK]
- Assuming LSI can have different partition key
- Using filter instead of key condition for partition key
- Believing LSI does not support queries
UserId and sort key OrderDate. You want to efficiently query all orders by Status and sort them by OrderAmount. Which secondary index should you create and how?Solution
Step 1: Identify query requirements
You want to query by Status (different from main partition key) and sort by OrderAmount.Step 2: Choose index type and keys
Since Status is different from main partition key, use a Global Secondary Index with Status as partition key and OrderAmount as sort key.Final Answer:
Create a Global Secondary Index with partition key Status and sort key OrderAmount. -> Option AQuick Check:
GSI allows different partition and sort keys [OK]
- Trying to use LSI with different partition key
- Swapping partition and sort keys incorrectly
- Choosing wrong index type for query pattern
Ready to prove it?
Pass the test and this pattern moves unknown
