Проверяет понимание влияния индексов на производительность SELECT-запросов, включая случаи, когда индексы могут замедлить выполнение.
Индексы в базах данных создаются для ускорения поиска и сортировки данных. Однако они не всегда ускоряют SELECT-запросы; в некоторых случаях они могут замедлить выполнение. Это связано с тем, что оптимизатор запросов должен решить, использовать ли индекс, и если решение неверное, производительность может ухудшиться.
Основные сценарии, когда индекс негативно влияет на SELECT:
Рассмотрим таблицу users с миллионом записей и индексом на столбце status, где 90% записей имеют статус 'active'.
CREATE INDEX idx_status ON users(status);
-- Запрос, который может быть медленным с индексом
SELECT * FROM users WHERE status = 'active';
-- Оптимизатор может использовать индекс, но вернет 900k строк,
-- что приведет к множеству случайных чтений.
-- Более эффективно без индекса (full scan)
SELECT * FROM users WHERE status = 'active';
-- Если оптимизатор выберет full scan, данные читаются последовательно,
-- что может быть быстрее для такого большого количества строк.Чтобы индексы не замедляли SELECT, важно:
EXPLAIN.Индексы — мощный инструмент, но их применение требует анализа. В случаях, когда запрос возвращает большую часть таблицы или индекс имеет низкую селективность, отказ от индекса может ускорить выполнение. Всегда оценивайте конкретные запросы и структуру данных, чтобы принимать обоснованные решения.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
Postgres
SQL
Ключевые слова
Подпишись на Golang Developer в телеграм