Bird
0
0

You want to optimize this query:

hard📝 Application Q15 of 15
SQL - Indexes and Query Performance
You want to optimize this query:

SELECT user_id, last_login, status FROM users WHERE status = 'active' AND last_login > '2024-01-01';

Which covering index will best speed up this query?
ACREATE INDEX idx_users_userid ON users(user_id);
BCREATE INDEX idx_users_login_status ON users(last_login, status);
CCREATE INDEX idx_users_status_login ON users(status, last_login, user_id);
DCREATE INDEX idx_users_status ON users(status);
Step-by-Step Solution
Solution:
  1. Step 1: Identify columns used in WHERE and SELECT

    The query filters by status and last_login, and selects user_id, last_login, and status.
  2. Step 2: Choose index covering all these columns

    CREATE INDEX idx_users_status_login ON users(status, last_login, user_id); includes status, last_login, and user_id, covering all needed columns for filtering and selection.
  3. Step 3: Confirm column order for filtering

    Status is first in the index, matching the equality filter, then last_login for range filter, optimizing index usage.
  4. Final Answer:

    CREATE INDEX idx_users_status_login ON users(status, last_login, user_id); -> Option C
  5. Quick Check:

    Covering index with WHERE and SELECT columns in filter order [OK]
Quick Trick: Include all WHERE and SELECT columns in index, filter columns first [OK]
Common Mistakes:
  • Ignoring SELECT columns in index
  • Wrong column order reducing index efficiency
  • Creating index on only one filter column

Want More Practice?

15+ quiz questions · All difficulty levels · Free

Free Signup - Practice All Questions
More SQL Quizzes