Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is an index-only scan in PostgreSQL?
An index-only scan is a way PostgreSQL reads data directly from an index without accessing the main table, making queries faster when all needed data is in the index.
Click to reveal answer
beginner
Why does PostgreSQL sometimes need to access the main table even when using an index?
Because the index might not have all the information needed, so PostgreSQL checks the main table to get missing data or confirm visibility of rows.
Click to reveal answer
intermediate
What condition must be met for PostgreSQL to use an index-only scan?
The index must contain all the columns needed by the query, and the visibility map must show that the data is visible without checking the main table.
Click to reveal answer
intermediate
How does the visibility map help index-only scans?
The visibility map tracks which pages have only visible rows, so PostgreSQL can skip reading the main table pages during an index-only scan.
Click to reveal answer
beginner
What is a practical benefit of index-only scans for database performance?
They reduce disk reads by avoiding the main table, which speeds up queries and lowers system load, especially for read-heavy workloads.
Click to reveal answer
What does an index-only scan avoid reading?
AThe main table data pages
BThe index pages
CThe query plan
DThe database logs
✗ Incorrect
An index-only scan reads data from the index without accessing the main table data pages.
Which PostgreSQL feature helps index-only scans skip table access?
AQuery planner
BWrite-ahead log
CVacuum process
DVisibility map
✗ Incorrect
The visibility map tracks which pages have all visible rows, allowing index-only scans to skip reading the main table.
When will PostgreSQL NOT use an index-only scan?
AWhen the index lacks needed columns
BWhen the query is simple
CWhen the table is small
DWhen the index is unique
✗ Incorrect
If the index does not contain all columns required by the query, PostgreSQL must access the main table.
What is a key advantage of index-only scans?
AMore accurate query results
BFaster query execution by reducing disk reads
CAutomatic index creation
DImproved data insertion speed
✗ Incorrect
Index-only scans speed up queries by reading only the index, reducing disk I/O.
What must be true about the visibility map for an index-only scan to work?
AIt contains all table rows
BIt is empty
CIt shows pages have only visible rows
DIt is disabled
✗ Incorrect
The visibility map must indicate that pages contain only visible rows so the main table can be skipped.
Explain in your own words how an index-only scan improves query speed in PostgreSQL.
Think about how skipping the main table saves time.
You got /4 concepts.
Describe the conditions needed for PostgreSQL to use an index-only scan.
Focus on what the index and visibility map must provide.
You got /4 concepts.
Practice
(1/5)
1. What is the main advantage of an index-only scan in PostgreSQL?
easy
A. It reads data only from the index without accessing the main table.
B. It updates the index faster than a normal scan.
C. It locks the table to prevent concurrent writes.
D. It creates a new index automatically during query execution.
Solution
Step 1: Understand what an index-only scan does
An index-only scan uses the index to get all needed data without reading the main table.
Step 2: Compare options to this behavior
Only It reads data only from the index without accessing the main table. describes reading data solely from the index, which is the key benefit.
Final Answer:
It reads data only from the index without accessing the main table. -> Option A
Quick Check:
Index-only scan = reads from index only [OK]
Hint: Index-only scans avoid table reads by using index data only [OK]
Common Mistakes:
Thinking index-only scans update data
Assuming they lock tables
Believing they create indexes automatically
2. Which of the following is a correct condition for PostgreSQL to use an index-only scan?
easy
A. The table has no indexes defined.
B. The index contains all columns needed by the query.
C. The query uses aggregate functions only.
D. The table is empty.
Solution
Step 1: Recall index-only scan requirements
PostgreSQL can use index-only scans only if the index has all columns the query needs.
Step 2: Evaluate each option
The index contains all columns needed by the query. matches the requirement; others do not enable index-only scans.
Final Answer:
The index contains all columns needed by the query. -> Option B
Quick Check:
Index-only scan requires full column coverage in index [OK]
Hint: Index-only scans need all query columns in the index [OK]
Common Mistakes:
Thinking index-only scans work without indexes
Assuming aggregates always use index-only scans
Believing empty tables affect index-only scans
3. Given a table users(id, name, email) with an index on (id, email), which query can use an index-only scan?
medium
A. SELECT id, email FROM users WHERE id = 10;
B. SELECT name FROM users WHERE id = 10;
C. SELECT email FROM users WHERE name = 'Alice';
D. SELECT * FROM users WHERE email = 'a@example.com';
Solution
Step 1: Check index columns and query columns
The index covers columns id and email. Query C requests only id and email.
Step 2: Determine if index-only scan is possible
Query C can use index-only scan because all requested columns are in the index. Others request columns not in the index.
Final Answer:
SELECT id, email FROM users WHERE id = 10; -> Option A
Quick Check:
Query columns ⊆ index columns = index-only scan [OK]
Hint: Index-only scan if query columns are subset of index columns [OK]
Common Mistakes:
Choosing queries requesting columns not in index
Ignoring WHERE clause columns
Assuming * always uses index-only scan
4. You have an index on (username, email) but your query SELECT email FROM users WHERE username = 'bob'; is not using an index-only scan. What could be the reason?
medium
A. The query uses a WHERE clause on username, so index-only scan is impossible.
B. The index does not include the email column.
C. The table's visibility map is not updated, so PostgreSQL must check the table.
D. PostgreSQL never uses index-only scans on text columns.
Solution
Step 1: Confirm index covers needed columns
The index includes username and email, so columns are covered.
Step 2: Understand visibility map role
Index-only scans require the visibility map to confirm tuples are visible without table access. If not updated, PostgreSQL reads the table.
Final Answer:
The table's visibility map is not updated, so PostgreSQL must check the table. -> Option C
Quick Check:
Visibility map must be updated for index-only scan [OK]
Hint: Visibility map must be updated for index-only scans [OK]
Common Mistakes:
Assuming index missing columns
Believing WHERE clause blocks index-only scan
Thinking data type prevents index-only scans
5. You want to optimize a query SELECT id, status FROM orders WHERE status = 'shipped'; for index-only scans. The current index is on (id). What is the best way to enable index-only scans?
hard
A. Add a WHERE clause to filter only 'shipped' status.
B. Create a partial index on (id) where status = 'shipped'.
C. Drop the existing index and rely on sequential scan.
D. Create a new index on (status, id) including both columns.
Solution
Step 1: Identify columns needed for index-only scan
The query selects id and status, so the index must cover both columns.
Step 2: Choose index that covers all columns
Creating an index on (status, id) includes both columns, enabling index-only scans.
Final Answer:
Create a new index on (status, id) including both columns. -> Option D
Quick Check:
Index covering all query columns enables index-only scan [OK]
Hint: Index must cover all selected columns for index-only scan [OK]
Common Mistakes:
Thinking partial index alone enables index-only scan
Dropping index reduces performance
Adding WHERE clause doesn't affect index structure