Bird
Raised Fist0
PostgreSQLquery~10 mins

Indexing materialized views in PostgreSQL - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a materialized view named sales_summary.

PostgreSQL
CREATE MATERIALIZED VIEW [1] AS SELECT product_id, SUM(quantity) AS total_qty FROM sales GROUP BY product_id;
Drag options to blanks, or click blank then click option'
Asales_summary
Bsummary_sales
Csales_view
Dsummary_view
Attempts:
3 left
💡 Hint
Common Mistakes
Using a regular view instead of a materialized view.
Choosing a name that does not reflect the content.
2fill in blank
medium

Complete the code to create an index on the product_id column of the materialized view.

PostgreSQL
CREATE INDEX idx_[1] ON sales_summary (product_id);
Drag options to blanks, or click blank then click option'
Aproduct
Bproduct_id
Csummary
Dsales
Attempts:
3 left
💡 Hint
Common Mistakes
Using a generic index name that doesn't indicate the column.
Misspelling the column name.
3fill in blank
hard

Fix the error in the code to refresh the materialized view concurrently.

PostgreSQL
REFRESH MATERIALIZED VIEW [1] CONCURRENTLY;
Drag options to blanks, or click blank then click option'
Asummary_sales
Bsales_summary_view
Csales_summary
Dsales_view
Attempts:
3 left
💡 Hint
Common Mistakes
Using a wrong or incomplete materialized view name.
Omitting the CONCURRENTLY keyword when needed.
4fill in blank
hard

Fill both blanks to create a unique index on the materialized view for product_id and date columns.

PostgreSQL
CREATE [1] INDEX idx_sales_summary_[2] ON sales_summary (product_id, sales_date);
Drag options to blanks, or click blank then click option'
AUNIQUE
BCONCURRENTLY
Cproduct_date
Dsales_date
Attempts:
3 left
💡 Hint
Common Mistakes
Using non-unique index when uniqueness is required.
Naming the index unclearly.
5fill in blank
hard

Fill all three blanks to create a materialized view with data and an index on the customer_id column.

PostgreSQL
CREATE MATERIALIZED VIEW [1] AS SELECT customer_id, COUNT(order_id) AS order_count FROM orders GROUP BY [2] WITH DATA; CREATE INDEX [3] ON [1] (customer_id);
Drag options to blanks, or click blank then click option'
Acustomer_orders
Bcustomer_id
Cidx_customer_orders_customer_id
Dorders_summary
Attempts:
3 left
💡 Hint
Common Mistakes
Mismatching group by column and selected column.
Using inconsistent names for the view and index.

Practice

(1/5)
1. What is the main purpose of creating an index on a materialized view in PostgreSQL?
easy
A. To speed up query performance on the materialized view
B. To automatically refresh the materialized view
C. To store the materialized view data physically
D. To prevent the materialized view from being updated

Solution

  1. Step 1: Understand what an index does

    An index helps the database find data faster by creating a quick lookup structure.
  2. Step 2: Apply this to materialized views

    Since materialized views store query results physically, indexing them speeds up queries on that stored data.
  3. Final Answer:

    To speed up query performance on the materialized view -> Option A
  4. Quick Check:

    Indexing = Faster queries [OK]
Hint: Indexes speed up data retrieval on stored results [OK]
Common Mistakes:
  • Thinking indexes refresh the view automatically
  • Confusing storage with indexing
  • Believing indexes prevent updates
2. Which of the following is the correct syntax to create an index on a materialized view named sales_summary on column region?
easy
A. CREATE INDEX idx_region ON TABLE sales_summary(region);
B. CREATE INDEX idx_region ON MATERIALIZED VIEW sales_summary(region);
C. CREATE INDEX idx_region ON sales_summary(region);
D. CREATE INDEX idx_region ON VIEW sales_summary(region);

Solution

  1. Step 1: Recall index creation syntax

    Indexes are created with CREATE INDEX index_name ON table_name(column); syntax.
  2. Step 2: Apply to materialized views

    Materialized views behave like tables for indexing, so no extra keywords like MATERIALIZED VIEW or VIEW are used.
  3. Final Answer:

    CREATE INDEX idx_region ON sales_summary(region); -> Option C
  4. Quick Check:

    Index syntax = CREATE INDEX name ON table(column) [OK]
Hint: Use table syntax for materialized views when creating indexes [OK]
Common Mistakes:
  • Adding MATERIALIZED VIEW keyword in index creation
  • Using VIEW keyword instead of table name
  • Incorrect syntax with TABLE keyword
3. Given a materialized view mv_orders with an index on order_date, what will be the output of this query?

SELECT order_date FROM mv_orders WHERE order_date = '2023-01-01';

Assuming the materialized view is refreshed and contains data for that date.
medium
A. Returns all rows with order_date '2023-01-01' quickly using the index
B. Returns an error because indexes cannot be used on materialized views
C. Returns no rows because materialized views do not store data
D. Returns all rows but ignores the index, causing slow performance

Solution

  1. Step 1: Understand index usage on materialized views

    Indexes on materialized views speed up queries by quickly locating matching rows.
  2. Step 2: Analyze the query behavior

    The query filters by order_date, which is indexed, so it returns matching rows efficiently.
  3. Final Answer:

    Returns all rows with order_date '2023-01-01' quickly using the index -> Option A
  4. Quick Check:

    Indexed query = fast matching rows [OK]
Hint: Indexed columns speed up matching queries on materialized views [OK]
Common Mistakes:
  • Thinking indexes don't work on materialized views
  • Assuming materialized views are empty without refresh
  • Believing query ignores indexes always
4. You created an index on a materialized view but notice queries are still slow. What is the most likely cause?
medium
A. Indexes do not work on materialized views in PostgreSQL
B. The materialized view has not been refreshed after data changes
C. The index was created on a non-existent column
D. Materialized views cannot have indexes on date columns

Solution

  1. Step 1: Understand materialized view refresh

    Materialized views store data physically but need manual refresh to update data and indexes.
  2. Step 2: Connect refresh to query speed

    If not refreshed, the view and its index are outdated, causing slow or incorrect query results.
  3. Final Answer:

    The materialized view has not been refreshed after data changes -> Option B
  4. Quick Check:

    Refresh needed for updated data and index [OK]
Hint: Always refresh materialized views after data changes [OK]
Common Mistakes:
  • Believing indexes don't work on materialized views
  • Creating index on wrong column silently
  • Thinking date columns can't be indexed
5. You have a materialized view mv_sales refreshed daily. You want to speed up queries filtering by customer_id and sale_date. Which is the best indexing strategy?
hard
A. Do not create any index; rely on sequential scan
B. Create separate indexes on customer_id and sale_date individually
C. Create an index only on sale_date because it is a date column
D. Create a single composite index on (customer_id, sale_date)

Solution

  1. Step 1: Understand composite vs single indexes

    A composite index on multiple columns speeds up queries filtering by both columns together.
  2. Step 2: Apply to query filtering by customer_id and sale_date

    Since queries filter on both columns, a composite index is more efficient than separate indexes.
  3. Final Answer:

    Create a single composite index on (customer_id, sale_date) -> Option D
  4. Quick Check:

    Composite index = faster multi-column filters [OK]
Hint: Use composite index for multi-column filtering queries [OK]
Common Mistakes:
  • Creating separate indexes causing less efficient queries
  • Indexing only one column when filtering by two
  • Skipping indexes and relying on slow scans
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard