DBAtlas · データベース運用アトラス

インデックスを再構築/再編成

Oracle

ALTER INDEX customer_city_idx REBUILD ONLINE;

ONLINE はテーブルをロックせずに再構築する(Enterprise Edition)。別の表領域へ移動するには: ... REBUILD TABLESPACE new_ts.

PostgreSQL

REINDEX INDEX CONCURRENTLY customer_city_idx;
-- Whole table: REINDEX TABLE CONCURRENTLY customer;

CONCURRENTLY(PG 12+)はテーブルへの書き込みをブロックせずに再構築する。低速だが安全。

MySQL

-- Rebuild InnoDB indexes + table:
ALTER TABLE customer ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE;
-- Alternative: OPTIMIZE TABLE customer;

LOCK=NONE は同時書き込みを許可する。すべての ALTER で INPLACE が可能とは限らない。

SQL Server

-- Rebuild for high fragmentation:
ALTER INDEX ALL ON dbo.customer REBUILD WITH (ONLINE = ON);
-- Lighter option for low fragmentation:
-- ALTER INDEX ALL ON dbo.customer REORGANIZE;

一般的なしきい値: 断片化 5-30% なら REORGANIZE、>30% なら REBUILD。ONLINE は Enterprise の機能。

MongoDB

db.customer.reIndex()

フォアグラウンドですべてのインデックスを再構築し、コレクションをロックする。6.0+ ではスタンドアロンでのみ実行可能(レプリカセットのメンバーでは不可)。レプリカセットでは、dropIndex + createIndex で単一のインデックスをノードごとに(ローリング)再構築する。

Redis

# Not applicable (core). If RediSearch is used:
# FT.ALTER / rebuilding is done per the module documentation.

キーバリューモデルには従来のインデックスメンテナンスがない。

DBAtlas で開く →