index 再構築方法

最新バージョンでは、索引の再構築の必要性は低くなっているものの、
しなくていいわけではない。
そのため、PostgreSQL で index を再構築について改めて確認してみた。

方法は以下3つ。

  1. reindex
  2. create index
  3. create index concurrently

まず、それぞれの操作について確認する

1. reindex - DML, select ともにLOCKされる
2. create index - DML は LOCK される。select は実施可能
3. create index concurrently - DML,select 可能

1. 実施は簡単なのだが、reindex によってすべての操作がLOCKされるため、メンテナンス中でないと実施できないオペレーション。オンラインシステムは使うことはほぼ不可能であろう。

2. create index は、selectは可能だが、DMLはLOCKされる。そのため、OLTPのシステムで使用するのはメンテナンス以外で使用することはないだろう。これをみると create index を行うならば reindex を採用する方がいいはずだ。

3.create index concurrently は、実施中にDML/select どちらも受け付けることができる。欠点としては作成に時間がかかることだが、オンラインシステムでは、concurrently以外に採用できる可能性は低い。
*1

一般的なINDEXへの対処法のため、primary key の場合にはまた処理が異なる。primary keyについては、また今度。

*1:補足:
create index や concurrently で作成した場合には、作成後もとの索引をdropする必要があるので忘れないように。