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+에서는 standalone에서만 실행된다(replica set 멤버에서는 허용되지 않음). replica set에서는 노드별로 순차(rolling) dropIndex + createIndex로 단일 인덱스를 재구축한다.

Redis

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

키-값 모델에는 전통적인 인덱스 유지보수가 없다.

DBAtlas에서 열기 →