状況
本番の PostgreSQL で、数千万行の orders にインデックスを追加する手順を読み合わせている。
PostgreSQL の CREATE INDEX は CONCURRENTLY を付けなくても、作成中の書き込みを止めない。
正答
× 誤り
解説
PostgreSQL の通常の CREATE INDEX は、作成が終わるまでテーブルへの書き込み(INSERT・UPDATE・DELETE)をブロックする。読み取りは続けられるが、大きな表では数分〜数十分書き込みが止まり、アプリはタイムアウトする。CREATE INDEX CONCURRENTLY なら書き込みを止めずに作れるが、時間がかかり、トランザクションの中では実行できず、失敗すると無効なインデックスが残る。MySQL も方式によってロックの程度が違うので、DB ごとにドキュメントで確かめる。
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ