■
通常インデックス作成時には、テーブルに対して書き込みロック
→ マルチテナントの場合は?
INDEX CONCURRENTLY
PostgreSQLはテーブルを2回スキャンしなければなりません。 さらに、潜在的にそのインデックスを使用する可能性がある、実行中のすべてのトランザクションが終わるまで待機しなければなりません。 したがって、この方式は通常の方式よりも総作業時間がかかり、また、完了するまでの時間が非常に長くなります。 しかし、インデックス作成中に通常の操作を行い続けることができますので、この方式は運用環境での新規インデックス作成に有用です。 もちろん、インデックス作成によりCPUや入出力に負荷がかかりますので、他の操作が低速になる可能性があります。
絶対にテーブル全体インデックス張り直しになるの?
例えば、TENANT_ID
, STATUS
の複合インデックスを作成したテーブルにINSERT
した場合、
TREEの一部に追加されるだけのイメージだが、他テナントに影響はありますのん?
複数検索条件(A
, B
, C
)があるとき...
idx_tenant_id_A
: (tenant_id
,A
)idx_tenant_id_B
: (tenant_id
,B
)idx_tenant_id_C
: (tenant_id
,C
)
のインデックスを作成すると?
SELECT * FROM table_name WHERE TENANT_ID = 1 AND A = "A" AND C = "C"
みたいなクエリはどうなる?
- テーブル内のデータ量が多く、少量のレコードを検索する場合
- WHERE句の条件、結合の条件、ORDER BY句の条件として頻繁に利用する