Выбор ответа Middle Индексы обновлено
Индекс на живой базе
Вопрос
Чем CREATE INDEX CONCURRENTLY отличается от обычного CREATE INDEX?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Не блокирует запись, но дольше и не в транзакции. Обычный CREATE INDEX держит блокировку, которая запрещает INSERT, UPDATE и DELETE до конца построения.
Варианты ответа
- Строит индекс в несколько потоков и поэтому быстрее
- Создаёт индекс сразу на всех репликах до коммита
- Ничем, это синоним для совместимости с MySQL
- Не блокирует запись, но дольше и не в транзакцииправильный ответ
Разбор
Обычный CREATE INDEX держит блокировку, которая запрещает INSERT, UPDATE и DELETE до конца построения. CONCURRENTLY делает два прохода по таблице и ждёт завершения старых транзакций, зато запись продолжается. Если построение упало, остаётся невалидный индекс, его удаляют и строят заново. Параллельные воркеры для построения B-tree настраиваются отдельно (max_parallel_maintenance_workers). На физические реплики индекс приезжает через WAL в любом случае.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.