Индексы в MySQL — зачем нужны и как правильно создавать

Раздел: MySQL

Темы:

Дата создания: 2025-06-09 18:22:02



Учебная статья для CodeStarter

Тема: «Индексы в MySQL — зачем нужны и как правильно создавать»


1. Зачем вообще нужны индексы?

Представьте большую книгу-справочник на 50 000 страниц. Если вам надо найти слово «Python», листать каждую страницу подряд — не-вариант. Проще открыть алфавитный указатель: по-букве «P» сразу видно, на каких страницах есть «Python».
Индекс в базе данных — это тот самый указатель, только для таблицы. Он экономит серверу время (и вам ожидание) при поиске строк по определённой колонке.


2. Как MySQL ищет данные без индекса

sql
SELECT * FROM goods2model WHERE model_id = 54;

Итог: 200–400 мс вместо 5 мс на крупных выборках.


3. Что меняется с индексом

sql
CREATE INDEX g2m_model_uid ON goods2model (model_id, goods_uid);

Индекс — это структура данных, которая живёт рядом с таблицей.
Данные в самой таблице не дублируются, поэтому размер БД растёт
умеренно (обычно +5–10 %).


4. Как создать индекс (пошагово в phpMyAdmin)

  1. Откройте базу в phpMyAdmin.

  2. Перейдите в таблицу goods2model → вкладка Structure.

  3. Нажмите Create index.

  4. Выберите поля model_id и goods_uid (именно в этом порядке).

  5. Назовите индекс, например g2m_model_uidSave.

⌛ Через пару секунд phpMyAdmin сообщит «OK». Индекс создан — готово!


5. Проверяем, что индекс работает

sql
EXPLAIN SELECT 1 FROM goods2model WHERE model_id = 54 \G

6. Нюансы, которые надо знать новичку

ВопросКороткий ответ
Нужно ли «заполнять» индекс вручную?Нет. MySQL сам добавляет и удаляет записи в индексе при INSERT/UPDATE/DELETE.
Станет ли медленнее запись данных?Чуть-чуть. Цена индекса — микро-задержка при вставке, но огромная экономия при чтении.
Можно ли удалить индекс?Да: DROP INDEX g2m_model_uid ON goods2model;
Индекс занимает место?Занимает, но обычно это 3-10 % от объёма таблицы — не страшно.
Всегда ли нужен индекс?Нужен там, где одна и та же колонка часто попадает в WHERE или JOIN ... ON. «Редкие» поля индексировать лишнее.

7. Резюме

Шаг для практики: попробуйте сами создать индекс на тестовой таблице, посчитайте время запроса до и после — убедитесь в разнице!


Автор: команда CodeStarter
Учимся ускорять бэкенд — шаг за шагом!



Вернуться на главную