Bird
Raised Fist0
MySQLquery~10 mins

Index selection strategy in MySQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Index selection strategy
Start Query
↓
Check WHERE clause
↓
Are columns indexed?
No→Full Table Scan
Yes↓
Use Index to filter rows
↓
Retrieve matching rows
↓
Return results
The database checks if query columns have indexes to decide between scanning the whole table or using the index to quickly find rows.
Execution Sample
MySQL
EXPLAIN SELECT * FROM employees WHERE department_id = 5;
Shows how MySQL chooses to use an index or not for filtering rows by department_id.
Execution Table
StepActionCondition/CheckDecisionResult
1Start query executionN/AN/ABegin processing SELECT
2Check WHERE clause columnsdepartment_id presentYesProceed to index check
3Check if department_id is indexedIndex exists on department_idYesUse index for filtering
4Use index to find matching rowsdepartment_id = 5Matches foundRetrieve rows via index
5Return resultsN/AN/AOutput filtered rows
6EndN/AN/AQuery complete
💡 Query ends after retrieving rows using index on department_id
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
Query StateNot startedWHERE clause identifiedIndex usage decidedRows filtered by indexResults returned
Key Moments - 2 Insights
Why does the database sometimes do a full table scan instead of using an index?
If the columns in the WHERE clause are not indexed (see execution_table step 3), the database cannot use an index and must scan the whole table.
How does the database decide which index to use if multiple indexes exist?
The database evaluates which index filters rows most efficiently based on the query conditions (refer to execution_table step 3 and 4). It picks the index that reduces rows scanned the most.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step does the database decide to use the index?
AStep 4
BStep 2
CStep 3
DStep 5
💡 Hint
Check the 'Decision' column in execution_table row for step 3 where index usage is decided.
According to variable_tracker, what is the state of the query after step 4?
AWHERE clause identified
BRows filtered by index
CIndex usage decided
DResults returned
💡 Hint
Look at the 'After Step 4' column for 'Query State' in variable_tracker.
If the department_id column had no index, what would happen according to the concept_flow?
AFull table scan
BUse index for filtering
CReturn no results
DQuery fails
💡 Hint
See concept_flow where 'Are columns indexed?' leads to 'Full Table Scan' if No.
Concept Snapshot
Index selection strategy:
- Database checks WHERE clause columns
- If columns are indexed, uses index to filter rows
- Otherwise, does full table scan
- Index use speeds up row retrieval
- Choosing best index improves query performance
Full Transcript
When a query runs, the database looks at the WHERE clause to see which columns are used. It then checks if those columns have indexes. If yes, it uses the index to quickly find matching rows. If not, it scans the entire table. Using indexes reduces the number of rows scanned and speeds up queries. The database picks the index that filters rows most efficiently. This process is shown step-by-step in the execution table and variable tracker.

Practice

(1/5)
1. What is the main purpose of using an index in a MySQL database?
easy
A. To increase the size of the database
B. To speed up data retrieval by creating shortcuts
C. To backup the database automatically
D. To store data in a compressed format

Solution

  1. Step 1: Understand what an index does

    An index creates a shortcut to quickly find data without scanning the whole table.
  2. Step 2: Compare options with index purpose

    Only To speed up data retrieval by creating shortcuts describes speeding up data retrieval, which is the main use of indexes.
  3. Final Answer:

    To speed up data retrieval by creating shortcuts -> Option B
  4. Quick Check:

    Index = Speed up search [OK]
Hint: Indexes speed up searches by creating shortcuts [OK]
Common Mistakes:
  • Thinking indexes compress data
  • Confusing indexes with backups
  • Believing indexes increase database size
2. Which of the following is the correct syntax to create an index on the column email in a table users?
easy
A. CREATE INDEX email_index ON users (email);
B. CREATE INDEX ON users email_index (email);
C. CREATE INDEX users.email_index (email);
D. INDEX CREATE email_index ON users (email);

Solution

  1. Step 1: Recall correct CREATE INDEX syntax

    The correct syntax is: CREATE INDEX index_name ON table_name (column_name);
  2. Step 2: Match syntax with options

    CREATE INDEX email_index ON users (email); matches the correct syntax exactly, others have wrong order or keywords.
  3. Final Answer:

    CREATE INDEX email_index ON users (email); -> Option A
  4. Quick Check:

    CREATE INDEX index_name ON table (column) [OK]
Hint: Remember: CREATE INDEX name ON table (column) [OK]
Common Mistakes:
  • Swapping index name and table name
  • Omitting ON keyword
  • Wrong keyword order
3. Given a table orders with an index on customer_id, what will happen when you run this query?
SELECT * FROM orders WHERE customer_id = 123;
medium
A. The query will fail with a syntax error
B. The query will scan the entire table ignoring the index
C. The query will use the index to quickly find matching rows
D. The query will update the customer_id values

Solution

  1. Step 1: Understand index usage in WHERE clause

    When a column in WHERE has an index, MySQL uses it to find rows faster.
  2. Step 2: Analyze query behavior

    The query filters by customer_id, which has an index, so it uses the index to speed up search.
  3. Final Answer:

    The query will use the index to quickly find matching rows -> Option C
  4. Quick Check:

    Indexed column in WHERE = index used [OK]
Hint: WHERE on indexed column uses index automatically [OK]
Common Mistakes:
  • Assuming full table scan always happens
  • Confusing SELECT with UPDATE
  • Expecting syntax errors in correct queries
4. You created an index on last_name but your query SELECT * FROM employees WHERE first_name = 'John'; is slow. What is the likely problem?
medium
A. The index on last_name is not used because the query filters on first_name
B. The index on last_name causes a syntax error
C. The query is missing a JOIN clause
D. The index automatically updates first_name values

Solution

  1. Step 1: Identify which column is indexed

    The index is on last_name, but the query filters on first_name.
  2. Step 2: Understand index usage

    Indexes only help if the filtered column is indexed; here first_name is not indexed, so index is unused.
  3. Final Answer:

    The index on last_name is not used because the query filters on first_name -> Option A
  4. Quick Check:

    Index column ≠ filtered column = no index use [OK]
Hint: Index helps only if filtered column matches indexed column [OK]
Common Mistakes:
  • Expecting index on different column to help
  • Thinking index causes syntax errors
  • Confusing filtering with updating
5. You have a table products with columns category, price, and stock. You often run this query:
SELECT * FROM products WHERE category = 'Books' AND price < 20;
Which index strategy is best to speed up this query?
hard
A. Create an index only on price
B. Create separate indexes on category and stock
C. Create a composite index on (stock, price)
D. Create a composite index on (category, price)

Solution

  1. Step 1: Analyze query filter columns

    The query filters on category and price together.
  2. Step 2: Choose index covering both columns

    A composite index on (category, price) helps MySQL filter efficiently on both conditions.
  3. Step 3: Evaluate other options

    Separate indexes or indexes on stock do not help this query's WHERE clause.
  4. Final Answer:

    Create a composite index on (category, price) -> Option D
  5. Quick Check:

    Composite index on filtered columns = best speed [OK]
Hint: Composite index on all filtered columns speeds queries best [OK]
Common Mistakes:
  • Indexing unrelated columns
  • Using separate indexes instead of composite
  • Ignoring query filter columns
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