Bird
Raised Fist0
SQLquery~5 mins

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

Choose your learning style10 modes available
Introduction

An index helps the database find data faster, like a book's index helps you find a topic quickly.

When you want to speed up searching for a specific value in a large table.
When you often sort data by a certain column and want faster results.
When you join tables on a column and want quicker matching.
When you want to avoid scanning the whole table for queries.
When you want to improve performance of queries with WHERE conditions.
Syntax
SQL
CREATE INDEX index_name ON table_name (column_name);
An index is usually built on one or more columns of a table.
The database uses a B-tree structure to keep the index organized for fast searching.
Examples
This creates an index on the name column of the customers table to speed up searches by customer name.
SQL
CREATE INDEX idx_customer_name ON customers (name);
This index helps quickly find orders by their date.
SQL
CREATE INDEX idx_order_date ON orders (order_date);
This index speeds up queries filtering products by category.
SQL
CREATE INDEX idx_product_category ON products (category);
Sample Program

This example creates a table of employees, inserts some data, then creates an index on the department column. The EXPLAIN QUERY PLAN shows how the database uses the index to find employees in the Sales department faster.

SQL
CREATE TABLE employees (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  department VARCHAR(50)
);

INSERT INTO employees (id, name, department) VALUES
(1, 'Alice', 'Sales'),
(2, 'Bob', 'HR'),
(3, 'Charlie', 'Sales'),
(4, 'Diana', 'IT');

CREATE INDEX idx_department ON employees (department);

EXPLAIN QUERY PLAN
SELECT * FROM employees WHERE department = 'Sales';
OutputSuccess
Important Notes

A B-tree index works like a tree with branches and leaves, helping the database jump quickly to the right data instead of looking at every row.

Indexes speed up reads but can slow down writes because the index must be updated when data changes.

Not every query benefits from an index; sometimes a full table scan is faster for small tables.

Summary

An index is like a fast lookup guide for your data.

It uses a B-tree structure to quickly find values without scanning the whole table.

Creating indexes on columns you search often can make your queries much faster.

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