Перейти к содержанию

Индексы: как они работают и когда их применять

Начало урока

Индексы: как они работают и когда их применять

Ускоряем чтение, позволяя базе сразу переходить к нужным строкам

Главная идея: индекс — это отдельная отсортированная структура данных, которую база хранит рядом с таблицей, чтобы находить строки, не просматривая каждую. Это классический размен: место на диске и время записи в обмен на скорость чтения. Запросы, которые фильтруют, соединяют или сортируют по проиндексированному столбцу, становятся заметно быстрее, а каждый INSERT, UPDATE и DELETE делает чуть больше работы, и сам индекс занимает место. Умение понять, когда этот размен окупается, — и есть весь навык.
К концу этой темы вы сможете:
  • объяснить, почему запрос без индекса делает полное сканирование таблицы,
  • описать, как B-tree-индекс сужает поиск до нескольких чтений,
  • назвать, что индекс ускоряет (равенство, диапазоны, ORDER BY, соединения) и чего он стоит,
  • выбирать хорошие столбцы, используя селективность и правило крайнего левого префикса для составных индексов,
  • проверять, действительно ли используется индекс, с помощью EXPLAIN,
  • распознавать случаи, когда индекс добавлять не нужно.

1. Проблема: полное сканирование таблицы

Все примеры на этой странице используют одну небольшую таблицу интернет-магазина. Создайте её один раз и загрузите несколько строк:

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    email       VARCHAR(120),
    city        VARCHAR(50),
    created_at  DATE
);

INSERT INTO customers (customer_id, email, city, created_at) VALUES
    (1, 'ana@shop.io',   'Bishkek', '2025-01-04'),
    (2, 'omar@shop.io',  'Osh',     '2025-01-09'),
    (3, 'lena@shop.io',  'Bishkek', '2025-02-14'),
    (4, 'raj@shop.io',   'Naryn',   '2025-02-20'),
    (5, 'mira@shop.io',  'Osh',     '2025-03-02');

Теперь представьте, что в этой таблице миллион строк, и вы выполняете самый обычный поиск:

SELECT * FROM customers WHERE email = 'raj@shop.io';

Без индекса на email база не знает, где находится эта строка. Она вынуждена прочитать каждую строку и по очереди сравнить её email. Это и есть полное сканирование таблицы: на миллионе строк выполняется около миллиона сравнений, чтобы вернуть один результат.

Аналогия. Представьте учебник на 900 страниц без предметного указателя в конце. Чтобы найти все страницы, где упоминается «фотосинтез», пришлось бы пролистать все 900 страниц. Алфавитный указатель в конце меняет дело: вы переходите к букве «Ф», читаете одну строку, и она указывает точные страницы. Индекс базы данных — это такой же указатель, но для ваших строк.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя