← Все вопросы

Как добавить индекс в SQL и зачем он нужен (CREATE INDEX)?

Задан 20 месяцев назад740 просмотров2 ответа
11

Слышал, что запросы можно ускорить индексами, но не понимаю, как и когда их добавлять. Как создать индекс в SQL и зачем он нужен? Почему нельзя просто навесить индексы на все столбцы?

2 ответа

15
✓ Принятый ответ — помог автору

Индекс — это вспомогательная структура (обычно B-дерево), которая помогает базе быстро находить строки по значению столбца, не просматривая всю таблицу. Аналогия — алфавитный указатель в конце книги: вместо листания всех страниц вы открываете нужную сразу.

Создаётся командой CREATE INDEX:

CREATE INDEX idx_users_email ON users (email);

Теперь запрос WHERE email = '...' или JOIN по email будет работать гораздо быстрее на большой таблице: вместо полного перебора (O(n)) поиск идёт примерно за O(log n).

Когда индекс особенно полезен:

  • столбцы в WHERE (фильтрация),
  • столбцы в условиях JOIN (ON),
  • столбцы в ORDER BY (сортировка),
  • внешние ключи.

Почему нельзя индексировать всё подряд — у индексов есть цена:

  1. Они занимают место на диске.
  2. Они замедляют запись (INSERT/UPDATE/DELETE), потому что при каждом изменении данных индекс тоже надо обновлять.
  3. Лишние индексы, которые не используются, только мешают.

Поэтому индексы ставят прицельно — на те столбцы, по которым реально часто ищут или соединяют.

Первичный ключ, к слову, индексируется автоматически, отдельный индекс на него создавать не нужно. Для уникальности есть CREATE UNIQUE INDEX.

6

Полезно знать про составной индекс по нескольким столбцам и правило «левого префикса». Индекс (city, age) ускорит поиск по city и по city + age, но не по одному age — порядок столбцов важен. И учтите: индекс не помогает, если в условии стоит функция от столбца (WHERE LOWER(email) = ...) или шаблон LIKE с % в начале — тогда обычный индекс не используется. Проверить, применился ли индекс, можно командой EXPLAIN перед запросом.

Ваш ответ

Войдите, чтобы ответить на вопрос.