📖 Теория
⚡ Кратко: теория
Оптимизация запросов нужна, чтобы уменьшить время выполнения и расход ресурсов базы данных.
Главный инструмент урока — индекс: структура данных, которая помогает быстрее находить строки без полного просмотра таблицы.
Ключевые команды: CREATE INDEX, CREATE UNIQUE INDEX, CREATE FULLTEXT INDEX, EXPLAIN.
Минимальный пример: CREATE INDEX idx_students_age ON students(age), затем EXPLAIN SELECT * FROM students WHERE age = 20.
Индекс полезен для частых фильтров, сортировок и группировок, но он занимает место и замедляет вставку, обновление и удаление.
Топ-3 ошибки: индексировать все столбцы подряд, не проверять план через EXPLAIN, ждать пользы от индекса на очень маленькой таблице.
Что такое оптимизация запросов
По источнику оптимизация запросов в MySQL направлена на повышение скорости и эффективности работы базы данных. Когда СУБД выполняет запрос, она тратит процессорное время, память и операции чтения.
Цель оптимизации — уменьшить количество используемых ресурсов и время выполнения запроса. Один из ключевых инструментов — индексация.
Что такое индекс
Индексация — способ организации данных, который ускоряет выполнение запросов. Индекс — структура данных, чаще всего дерево, которая помогает быстрее находить записи без полного сканирования всей таблицы.
Без индекса запрос WHERE age = 30 может читать каждую строку. С индексом по age MySQL может быстрее перейти к подходящим значениям.
Типы индексов в MySQL
| Тип | Назначение | Пример |
|---|---|---|
PRIMARY KEY | Уникальный первичный ключ | id INT PRIMARY KEY |
UNIQUE INDEX | Запрещает дубликаты | CREATE UNIQUE INDEX ... |
INDEX | Обычное ускорение поиска | CREATE INDEX idx_age ON employees(age) |
FULLTEXT INDEX | Полнотекстовый поиск | CREATE FULLTEXT INDEX ... |
COMPOSITE INDEX | Индекс по нескольким столбцам | CREATE INDEX idx_dep_age ON employees(department_id, age) |
Минусы индексации
Источник подчёркивает три минуса: индексы занимают дисковое пространство, замедляют вставку/обновление/удаление и могут быть неэффективны на очень маленьких таблицах.
Практическое правило: индексируйте не «всё подряд», а столбцы, по которым часто фильтруют, сортируют или группируют данные.
EXPLAIN
EXPLAIN показывает, как MySQL будет выполнять запрос: какой тип сканирования планируется, сколько строк примерно будет прочитано, какой индекс будет использован.
EXPLAIN SELECT *
FROM employees
WHERE age = 30;
Смысл EXPLAIN — не просто увидеть красивую таблицу, а проверить гипотезу: помогает ли индекс конкретному запросу.
EXPLAIN/EXPLAIN ANALYZE, для SQLite — EXPLAIN QUERY PLAN.