На какие операции в SQL-запросах влияют индексы?

«На какие операции в SQL-запросах влияют индексы?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Индексы ускоряют следующие операции:

  1. Фильтрация (WHERE): Быстрый поиск строк по значению колонки.

    SELECT * FROM users WHERE email = 'user@example.com'; -- Использует индекс по `email`
  2. Соединения (JOIN): Ускорение поиска совпадающих строк в связанных таблицах.

    SELECT * FROM orders
    JOIN customers ON orders.customer_id = customers.id; -- Индекс на `customer_id` и `customers.id`
  3. Сортировка (ORDER BY): Позволяет избежать дорогостоящей операции внешней сортировки (filesort), если порядок соответствует индексу.

    SELECT * FROM products ORDER BY created_at DESC; -- Использует индекс по `created_at`
  4. Группировка (GROUP BY): Эффективная агрегация данных.

    SELECT department_id, COUNT(*) FROM employees GROUP BY department_id; -- Индекс на `department_id`
  5. Агрегатные функции (MIN, MAX): Для нахождения крайних значений индекс может быть использован для прямого доступа к первому/последнему элементу.

    SELECT MIN(price) FROM products; -- Индекс по `price` позволяет быстро найти минимальное значение

Важно: Индексы замедляют INSERT, UPDATE и DELETE, так как каждое изменение данных требует соответствующего обновления всех связанных индексов.