Выбор ответа Middle Индексы обновлено

Индекс на живой базе

Вопрос

Чем CREATE INDEX CONCURRENTLY отличается от обычного CREATE INDEX?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Не блокирует запись, но дольше и не в транзакции. Обычный CREATE INDEX держит блокировку, которая запрещает INSERT, UPDATE и DELETE до конца построения.

Варианты ответа

  1. Строит индекс в несколько потоков и поэтому быстрее
  2. Создаёт индекс сразу на всех репликах до коммита
  3. Ничем, это синоним для совместимости с MySQL
  4. Не блокирует запись, но дольше и не в транзакцииправильный ответ

Разбор

Обычный CREATE INDEX держит блокировку, которая запрещает INSERT, UPDATE и DELETE до конца построения. CONCURRENTLY делает два прохода по таблице и ждёт завершения старых транзакций, зато запись продолжается. Если построение упало, остаётся невалидный индекс, его удаляют и строят заново. Параллельные воркеры для построения B-tree настраиваются отдельно (max_parallel_maintenance_workers). На физические реплики индекс приезжает через WAL в любом случае.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.