Bird
Raised Fist0
SQLquery~10 mins

How an index works (B-tree mental model) in SQL - Visual Walkthrough

Choose your learning style10 modes available
Concept Flow - How an index works (B-tree mental model)
Start: Search for value
↓
Check root node keys
↓
Go to child node
↓
Repeat check keys in node
↓
Reach leaf node
↓
Find value or conclude not found
↓
End
The B-tree index starts at the root, compares keys to decide which child node to follow, repeats this until reaching a leaf node where the value is found or not.
Execution Sample
SQL
SELECT * FROM users WHERE id = 42;
This query uses the B-tree index on 'id' to quickly find the row with id 42.
Execution Table
StepNode LevelKeys in NodeCompare with 42DecisionNext Node
1Root[10, 30, 50]42 > 30 and < 50Go to child between 30 and 50Child Node 2
2Child Node 2[35, 40, 45]42 > 40 and < 45Go to child between 40 and 45Child Node 5
3Child Node 5 (Leaf)[41, 42, 43]Found 42Return row with id=42End
💡 Value 42 found at leaf node, search ends.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3
Current NodeRootChild Node 2Child Node 5Leaf Node with value 42
Keys ComparedNone[10, 30, 50][35, 40, 45][41, 42, 43]
DecisionNoneGo to child between 30 and 50Go to child between 40 and 45Found 42
Key Moments - 2 Insights
Why do we compare the search value with keys in the node instead of scanning all data?
Because the B-tree index stores keys in sorted order in nodes, comparing keys lets us quickly decide which child node to follow, avoiding scanning all data. See execution_table steps 1 and 2.
What happens if the value is not found in the leaf node?
If the value is not in the leaf node keys, the search concludes the value does not exist in the table. The search stops at the leaf node after comparisons, as shown in execution_table step 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at Step 2, which keys are compared to decide the next node?
A[10, 30, 50]
B[35, 40, 45]
C[41, 42, 43]
D[30, 50, 70]
💡 Hint
Check the 'Keys in Node' column at Step 2 in the execution_table.
At which step does the search find the value 42?
AStep 3
BStep 2
CStep 1
DSearch never finds 42
💡 Hint
Look at the 'Compare with 42' and 'Decision' columns in execution_table.
If the root node keys changed to [20, 40, 60], which child node would the search follow for value 42?
AChild between 20 and 40
BChild less than 20
CChild between 40 and 60
DChild greater than 60
💡 Hint
Compare value 42 to the root keys and decide which range it falls into.
Concept Snapshot
B-tree index stores keys in sorted nodes.
Search starts at root node.
Compare search value with node keys.
Follow child pointer based on comparison.
Repeat until leaf node.
Find value or conclude not found.
Full Transcript
A B-tree index helps find data quickly by organizing keys in a tree structure. The search starts at the root node, compares the search value with keys in that node, and decides which child node to follow. This process repeats down the tree until reaching a leaf node. At the leaf, the value is either found or determined to be missing. This avoids scanning all data by narrowing down the search path step-by-step.

Practice

(1/5)
1. What is the main purpose of a B-tree index in a database?
easy
A. To speed up data retrieval by organizing data in a balanced tree structure
B. To store data in a random order for faster insertion
C. To compress data to save disk space
D. To backup the database automatically

Solution

  1. Step 1: Understand what a B-tree index does

    A B-tree index organizes data in a balanced tree structure to allow quick searching without scanning the entire table.
  2. Step 2: Compare options with B-tree purpose

    Only To speed up data retrieval by organizing data in a balanced tree structure describes speeding up data retrieval using a balanced tree, which matches the B-tree index function.
  3. Final Answer:

    To speed up data retrieval by organizing data in a balanced tree structure -> Option A
  4. Quick Check:

    B-tree index = fast data lookup [OK]
Hint: B-tree indexes speed up searches by organizing data hierarchically [OK]
Common Mistakes:
  • Thinking indexes store data randomly
  • Confusing index with data compression
  • Believing indexes backup data
2. Which SQL statement correctly creates a B-tree index on the column last_name of the table employees?
easy
A. CREATE INDEX idx_last_name ON employees USING HASH (last_name);
B. CREATE INDEX idx_last_name ON employees (last_name) USING BITMAP;
C. CREATE INDEX idx_last_name ON employees (last_name);
D. CREATE INDEX idx_last_name ON employees USING FULLTEXT (last_name);

Solution

  1. Step 1: Identify default index type in SQL

    By default, CREATE INDEX creates a B-tree index unless specified otherwise.
  2. Step 2: Check syntax correctness

    CREATE INDEX idx_last_name ON employees (last_name); uses correct syntax without specifying a different index type, so it creates a B-tree index on last_name.
  3. Final Answer:

    CREATE INDEX idx_last_name ON employees (last_name); -> Option C
  4. Quick Check:

    Default index type = B-tree [OK]
Hint: Default index type is B-tree unless stated otherwise [OK]
Common Mistakes:
  • Using HASH or FULLTEXT without need
  • Adding unsupported index types like BITMAP in standard SQL
  • Incorrect syntax for index creation
3. Given a table products with a B-tree index on product_id, what will the query optimizer most likely do when running:
SELECT * FROM products WHERE product_id = 123;?
medium
A. Use the B-tree index to quickly locate the row with product_id 123
B. Perform a full table scan ignoring the index
C. Use a hash index lookup instead of the B-tree
D. Scan only the first 10 rows of the table

Solution

  1. Step 1: Understand query condition and index

    The query searches for a specific product_id value, which matches the indexed column.
  2. Step 2: Predict optimizer behavior with B-tree index

    The optimizer uses the B-tree index to quickly find the matching row without scanning the whole table.
  3. Final Answer:

    Use the B-tree index to quickly locate the row with product_id 123 -> Option A
  4. Quick Check:

    Indexed search = fast lookup [OK]
Hint: Queries on indexed columns use B-tree for fast lookup [OK]
Common Mistakes:
  • Assuming full table scan always happens
  • Confusing B-tree with hash index usage
  • Thinking partial scan happens without index
4. You created a B-tree index on the email column of the users table, but queries filtering by email are still slow. What is a likely cause?
medium
A. The index was created on the wrong column
B. The query uses a function on email preventing index use
C. B-tree indexes do not speed up queries on text columns
D. The table has too few rows for the index to help

Solution

  1. Step 1: Analyze query and index interaction

    If the query applies a function (like LOWER(email)) on the indexed column, the B-tree index cannot be used directly.
  2. Step 2: Evaluate other options

    The index was created on the wrong column is unlikely if index was created correctly; C is false because B-tree indexes work on text; D is possible but less likely than B.
  3. Final Answer:

    The query uses a function on email preventing index use -> Option B
  4. Quick Check:

    Functions on indexed columns block B-tree use [OK]
Hint: Functions on indexed columns disable B-tree index use [OK]
Common Mistakes:
  • Assuming B-tree indexes don't work on text
  • Ignoring query transformations on columns
  • Blaming index creation without checking query
5. You have a large table orders with columns order_id, customer_id, and order_date. You often query orders by customer_id and sort by order_date. How should you create an index to optimize these queries?
hard
A. Create a single-column B-tree index on order_date
B. Create separate B-tree indexes on customer_id and order_date
C. Create a hash index on customer_id
D. Create a composite B-tree index on (customer_id, order_date)

Solution

  1. Step 1: Understand query pattern

    Queries filter by customer_id and sort by order_date, so both columns matter together.
  2. Step 2: Choose index type for filtering and sorting

    A composite B-tree index on (customer_id, order_date) supports filtering by customer and sorting by date efficiently.
  3. Final Answer:

    Create a composite B-tree index on (customer_id, order_date) -> Option D
  4. Quick Check:

    Composite index matches filter + sort columns [OK]
Hint: Composite indexes speed up queries filtering and sorting on multiple columns [OK]
Common Mistakes:
  • Creating index only on sort column
  • Using separate indexes instead of composite
  • Choosing hash index which doesn't support sorting
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