Раздел: MySQL
Темы:
Дата создания: 2025-06-09 18:22:02
Тема: «Индексы в MySQL — зачем нужны и как правильно создавать»
Представьте большую книгу-справочник на 50 000 страниц. Если вам надо найти слово «Python», листать каждую страницу подряд — не-вариант. Проще открыть алфавитный указатель: по-букве «P» сразу видно, на каких страницах есть «Python».
Индекс в базе данных — это тот самый указатель, только для таблицы. Он экономит серверу время (и вам ожидание) при поиске строк по определённой колонке.
Таблица goods2model — 100 000 строк.
Без индекса MySQL читает каждую строку:
«model_id = 1? мимо… 2? мимо… 54? берём! …»
Чем больше таблица — тем дольше «полистать».
⌚ Итог: 200–400 мс вместо 5 мс на крупных выборках.
MySQL строит упорядоченную «карточку» по колонке model_id.
Для запроса WHERE model_id = 54 сервер «прыгает» прямо к блоку 54 и читает только нужные 100–200 строк.
Время обработки падает в 5-30 раз.
Индекс — это структура данных, которая живёт рядом с таблицей.
Данные в самой таблице не дублируются, поэтому размер БД растёт
умеренно (обычно +5–10 %).
Откройте базу в phpMyAdmin.
Перейдите в таблицу goods2model → вкладка Structure.
Нажмите Create index.
Выберите поля model_id и goods_uid (именно в этом порядке).
Назовите индекс, например g2m_model_uid → Save.
⌛ Через пару секунд phpMyAdmin сообщит «OK». Индекс создан — готово!
Столбец key должен показать g2m_model_uid.
Столбец rows упадёт с «100000» до «100-200».
Значит, MySQL действительно использует наш указатель.
| Вопрос | Короткий ответ |
|---|---|
| Нужно ли «заполнять» индекс вручную? | Нет. MySQL сам добавляет и удаляет записи в индексе при INSERT/UPDATE/DELETE. |
| Станет ли медленнее запись данных? | Чуть-чуть. Цена индекса — микро-задержка при вставке, но огромная экономия при чтении. |
| Можно ли удалить индекс? | Да: DROP INDEX g2m_model_uid ON goods2model; |
| Индекс занимает место? | Занимает, но обычно это 3-10 % от объёма таблицы — не страшно. |
| Всегда ли нужен индекс? | Нужен там, где одна и та же колонка часто попадает в WHERE или JOIN ... ON. «Редкие» поля индексировать лишнее. |
Индекс — это ускоритель. Он делает поиск по колонке таким же быстрым, как поиск слова через оглавление.
Создаётся одной SQL-командой; данные «заполняются» автоматически.
В CodeStarter (и любом проекте) добавляйте индекс, когда видите медленный запрос по той же колонке.
Шаг для практики: попробуйте сами создать индекс на тестовой таблице, посчитайте время запроса до и после — убедитесь в разнице!
Автор: команда CodeStarter
Учимся ускорять бэкенд — шаг за шагом!