Вопрос проверяет, понимаешь ли ты, что индексы — это не только ускорение, но и источник проблем.
Неправильные индексы могут замедлять запись данных, занимать много памяти и диска, а также вообще не использоваться в запросах. Избыточные индексы усложняют план выполнения и увеличивают время INSERT и UPDATE. Иногда индекс есть, но он не подходит под конкретный запрос, и БД его игнорирует.
Индексы ускоряют чтение, но за это всегда приходится платить. Если индексы используются неправильно, они начинают вредить.
Index misuse — ситуация, когда индексы либо не используются, либо создают больше накладных расходов, чем пользы.
Проблемы:
каждый INSERT, UPDATE, DELETE обновляет все индексы;
растёт время записи;
увеличивается размер БД.
Типичный пример:
индекс на колонку, по которой почти не фильтруют.
Причины:
запросы используют выражения (LOWER(email));
несовпадение порядка колонок в составном индексе;
низкая селективность.
Результат:
индекс есть, но Seq Scan всё равно используется.
Слишком много индексов:
усложняет выбор плана;
может приводить к неоптимальным решениям планировщика.
Иногда индекс:
ускоряет один редкий запрос;
но замедляет всю систему из-за записи.
Индексы нужно создавать под реальные запросы, а не «на всякий случай». Лишние и неподходящие индексы часто делают систему медленнее, а не быстрее.