Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Оптимизация индексов в MySQL
Базы данных·14 тем·84 вопроса·уровень Middle, Senior

Оптимизация индексов в MySQL

Продвинутый курс по оптимизации индексов в MySQL. Охватывает все ключевые аспекты: от базовых структур данных (B-Tree, hash) до продвинутых техник оптимизации запросов. Курс включает анализ EXPLAIN, покрывающие индексы, оптимизацию JOIN и подзапросов, работу с большими данными, мониторинг и диагностику проблем производительности. Подходит для разработчиков и DBA, работающих с высоконагруженными системами.

Начать курс

Оптимизация индексов в MySQL

Индекс, добавленный «чтобы ускорить», оптимизатор может не взять: функция над столбцом, неподходящий порядок колонок в составном индексе, устаревшая статистика — и запрос по-прежнему читает всю таблицу. Курс про то, как перестать гадать: читать план, понимать, почему выбран именно он, и менять условия так, чтобы индекс работал.

Четырнадцать тем. Начало — устройство: B-Tree, hash и полнотекстовые индексы, затем B-Tree вглубь — страницы, узлы, ветвление, и как из этого следует стоимость поиска. Дальше правила, которые применяются каждый день: составные индексы и порядок столбцов, правило самого левого префикса, покрывающие индексы, когда запрос отвечается без обращения к таблице, index condition pushdown.

Центральная тема — EXPLAIN и EXPLAIN ANALYZE: как читать вывод, что означают типы доступа, где видно, что индекс используется частично. Рядом — селективность и кардинальность, статистика и её влияние на выбор оптимизатора, index merge с объединением нескольких индексов в одном запросе.

Затем запросы посложнее: индексирование под JOIN (nested loop, block nested loop, batched key access), подзапросы и производные таблицы, материализация, EXISTS против IN, коррелированные подзапросы.

Эксплуатационная часть: фрагментация и обслуживание индексов, поиск неиспользуемых, особенности InnoDB — кластерный первичный ключ, из-за которого широкий PK утяжеляет каждый вторичный индекс, — полнотекстовый поиск, таблицы в миллиарды строк с партиционированием и разделением горячих и холодных данных. Финал — диагностика: slow query log, Performance Schema, sys schema.

Для разработчиков и DBA. Нужен уверенный SQL и опыт работы с MySQL.

  1. 1

    Структуры индексов: B-Tree, Hash, Fulltext

    Внутреннее устройство различных типов индексов, их преимущества и ограничения

    6 вопросов
  2. 2

    Внутреннее устройство B-Tree индексов

    Глубокое погружение в структуру B-Tree: страницы, узлы, балансировка, кластеризация

    6 вопросов
  3. 3

    Составные индексы и порядок столбцов

    Правила создания составных индексов, выбор порядка столбцов, leftmost prefix rule

    6 вопросов
  4. 4

    Покрывающие индексы (Covering Indexes)

    Индексы, покрывающие весь запрос без обращения к таблице, index condition pushdown

    6 вопросов
  5. 5

    Анализ планов выполнения с EXPLAIN

    Чтение и интерпретация EXPLAIN, EXPLAIN ANALYZE, типы JOIN в плане выполнения

    6 вопросов
  6. 6

    Селективность индексов и статистика

    Кардинальность, селективность, обновление статистики, влияние на выбор оптимизатора

    6 вопросов
  7. 7

    Index Merge: Intersection, Union, Sort-Union

    Использование нескольких индексов в одном запросе, алгоритмы объединения

    6 вопросов
  8. 8

    Оптимизация JOIN запросов

    Стратегии индексирования для JOIN, Nested Loop, Block Nested Loop, Batched Key Access

    6 вопросов
  9. 9

    Оптимизация подзапросов и производных таблиц

    Materialization, derived tables, оптимизация EXISTS vs IN, коррелированные подзапросы

    6 вопросов
  10. 10

    Обслуживание индексов и фрагментация

    Фрагментация индексов, rebuild vs reorganize, мониторинг использования, неиспользуемые индексы

    6 вопросов
  11. 11

    Кластерные и вторичные индексы InnoDB

    Особенности хранения InnoDB, влияние PRIMARY KEY, lookup по вторичному индексу

    6 вопросов
  12. 12

    Полнотекстовый поиск и оптимизация

    Fulltext индексы, режимы поиска, релевантность, оптимизация текстового поиска

    6 вопросов
  13. 13

    Индексы для больших данных

    Оптимизация для таблиц в миллиарды строк, партиционирование, горячие и холодные данные

    6 вопросов
  14. 14

    Мониторинг и диагностика производительности

    Slow query log, Performance Schema, sys schema, анализ проблем производительности

    6 вопросов
  15. Зачёт

    Доступен после всех тем (0 из 14)

  16. Экзамен

    Доступен после зачёта

20 / 20

B-Tree индекс

Типы индексов

Индекс на основе сбалансированного дерева B-Tree (точнее B+Tree в MySQL). Позволяет выполнять поиск по равенству, диапазону и сортировку. Является структурой по умолчанию для движка InnoDB.

Пример

CREATE INDEX idx_name ON users(last_name, first_name); — создаёт B-Tree индекс

Связанные термины

Hash индекс

Типы индексов

Индекс на основе хэш-таблицы. Поддерживает только поиск по точному совпадению (=), не работает для диапазонов и сортировки. В InnoDB используется адаптивный хэш-индекс автоматически.

Пример

Адаптивный хэш-индекс включается параметром innodb_adaptive_hash_index=ON

Связанные термины

Fulltext индекс

Типы индексов

Специализированный индекс для полнотекстового поиска по текстовым столбцам. Поддерживает поиск по словам, булевы операторы и поиск с учётом релевантности.

Пример

CREATE FULLTEXT INDEX idx_body ON articles(body); SELECT * FROM articles WHERE MATCH(body) AGAINST('MySQL');

Связанные термины

Составной индекс

Типы индексов

Индекс, включающий несколько столбцов. MySQL может использовать левый префикс такого индекса (leftmost prefix). Порядок столбцов критически важен для эффективности.

Пример

INDEX(last_name, first_name, age) может использоваться для поиска по (last_name), (last_name, first_name), (last_name, first_name, age)

Связанные термины

Покрывающий индекс

Типы индексов

Индекс, который содержит все столбцы, необходимые для выполнения запроса. При использовании покрывающего индекса MySQL не обращается к данным таблицы — только к индексу. В EXPLAIN отмечается как 'Using index'.

Пример

INDEX(user_id, email) покрывает запрос SELECT email FROM users WHERE user_id = 5;

Связанные термины

B+Tree

Структуры данных

Вариант B-Tree, используемый в MySQL. Отличается тем, что данные хранятся только в листовых узлах, а внутренние узлы содержат только ключи. Листовые узлы связаны doubly-linked list для эффективного обхода диапазонов.

Пример

Все B-Tree индексы в InnoDB на самом деле реализованы как B+Tree

Связанные термины

Adaptive Hash Index

Структуры данных

Автоматически создаваемый InnoDB хэш-индекс для часто используемых значений B-Tree индексов. Включается/выключается на уровне сервера. Не управляется напрямую пользователем.

Пример

SHOW VARIABLES LIKE 'innodb_adaptive_hash_index'; — проверка статуса

Связанные термины

Leftmost Prefix Rule

Структуры данных

Правило левого префикса: составной индекс (A, B, C) может использоваться для запросов по (A), (A, B), (A, B, C), но не для (B, C) или (C). Порядок столбцов в индексе определяет, какие запросы смогут его использовать.

Пример

INDEX(last_name, first_name) работает для WHERE last_name = 'Ivanov', но не для WHERE first_name = 'Ivan'

Связанные термины

Index Condition Pushdown (ICP)

Оптимизация запросов

Оптимизация, при которой условие фильтрации выполняется на уровне storage engine при чтении индекса, до возврата строки серверу. Снижает количество обращений к данным таблицы.

Пример

В EXPLAIN: 'Using index condition' — MySQL фильтрует по индексу до обращения к строке

Связанные термины

Index Merge

Оптимизация запросов

Стратегия оптимизатора, объединяющая результаты нескольких индексов через Intersection, Union или Sort-Union. Позволяет использовать несколько индексов одновременно в одном запросе.

Пример

WHERE status = 'active' AND created_at > '2024-01-01' может использовать INDEX(status) и INDEX(created_at) через Index Merge Intersection

Связанные термины

Кластерный индекс

InnoDB и хранение

В InnoDB первичный ключ определяет кластерный индекс — данные таблицы физически хранятся в порядке B-Tree первичного ключа. Листовые узлы содержат полные строки, а не только ключи.

Пример

PRIMARY KEY(id) в InnoDB — это кластерный индекс; все строки хранятся отсортированными по id

Связанные термины

Вторичный индекс

InnoDB и хранение

Любой индекс, кроме кластерного. В InnoDB листовые узлы вторичного индекса содержат значение первичного ключа (а не ROWID). Lookup по вторичному индексу — это два поиска: по вторичному индексу + по кластерному.

Пример

INDEX(email) в InnoDB: сначала поиск по INDEX(email), затем по найденному id — поиск в кластерном индексе

Связанные термины

Селективность индекса

Диагностика и мониторинг

Отношение количества уникальных значений к общему количеству строк. Высокая селективность (близкая к 1) означает, что индекс хорошо фильтрует. Измеряется как COUNT(DISTINCT column) / COUNT(*).

Пример

Для столбца email с 10000 строк и 9500 уникальных значений: селективность = 0.95 — высокая

Связанные термины

Кардинальность

Диагностика и мониторинг

Количество уникальных значений в индексе. Оценивается InnoDB при анализе таблицы (ANALYZE TABLE). Влияет на решение оптимизатора об использовании индекса.

Пример

SHOW INDEX FROM users; — столбец Cardinality показывает оценку уникальных значений

Связанные термины

EXPLAIN

Диагностика и мониторинг

Команда для получения плана выполнения запроса без его фактического выполнения. Показывает тип доступа, используемые индексы, ожидаемое количество строк, дополнительные флаги.

Пример

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

Связанные термины

EXPLAIN ANALYZE

Диагностика и мониторинг

Расширенная версия EXPLAIN (MySQL 8.0.18+), которая фактически выполняет запрос и показывает реальное время выполнения, количество итераций и строк. Аналогично EXPLAIN (ANALYZE) в PostgreSQL.

Пример

EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 5 AND status = 'pending';

Связанные термины

Slow Query Log

Диагностика и мониторинг

Лог медленных запросов MySQL. Записывает запросы, выполняющиеся дольше заданного порога (long_query_time). Основной источник информации о проблемных запросах в продакшене.

Пример

SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; — логировать запросы дольше 1 секунды

Связанные термины

Performance Schema

Диагностика и мониторинг

Встроенная подсистема MySQL для мониторинга производительности в реальном времени. Содержит таблицы с метриками по ожиданиям, блокировкам, использованию индексов и I/O.

Пример

SELECT * FROM performance_schema.table_io_waits_summary_by_index_usage ORDER BY count_read DESC;

Связанные термины

sys Schema

Диагностика и мониторинг

Набор представлений поверх Performance Schema, упрощающих анализ производительности. Содержит удобные view для поиска неиспользуемых индексов, таблиц с наибольшим I/O и т.д.

Пример

SELECT * FROM sys.schema_unused_indexes; — список индексов, которые не использовались

Связанные термины

Фрагментация индексов

InnoDB и хранение

Деградация физической структуры индекса из-за частых UPDATE/DELETE. Приводит к увеличению I/O, так как данные разбросаны по страницам. Лечится через OPTIMIZE TABLE или ALTER TABLE ... ENGINE=InnoDB.

Пример

OPTIMIZE TABLE orders; — перестроение таблицы и индексов для устранения фрагментации

Связанные термины

Частые вопросы о курсе «Оптимизация индексов в MySQL»

Состав курса, уровни, практика и способы проверки знаний.

Что входит в курс «Оптимизация индексов в MySQL»?

Курс включает 14 тем и 84 вопроса с разбором ответа. Начать можно с первой темы курса.

Для какого уровня рассчитан курс «Оптимизация индексов в MySQL»?

Маршрут охватывает уровни Middle, Senior. Темы расположены от основы к более сложным инженерным задачам, поэтому можно начать с подходящего места и не пропускать важные зависимости.

Как проверить, что материал усвоен?

После прохождения тем доступен зачёт по курсу «Оптимизация индексов в MySQL» — 20 случайных вопросов с порогом 80%. После зачёта открывается экзамен с развёрнутыми ответами и автоматической оценкой, приближённый к техническому собеседованию.

Курс «Оптимизация индексов в MySQL» бесплатный?

Да, курс полностью бесплатный: все 14 тем доступны без оплаты.