인덱스
인덱스는 테이블의 indexing 전략을 ERD 안에 문서화합니다. 단일 컬럼 인덱스, 복합 인덱스, unique 제약을 모두 테이블 편집 패널에서 정의할 수 있습니다.
Indexes 섹션 열기
- 캔버스에서 테이블을 클릭해 편집 패널을 엽니다.
- Columns와 Foreign Keys 아래의 Indexes 섹션까지 스크롤합니다.
인덱스 추가
- Indexes 섹션에서 + Add Index를 클릭합니다.
- 속성을 설정합니다.
| 속성 | 설명 |
|---|---|
| Name | 인덱스명 예: idx_users_email, idx_orders_status_date |
| Columns | 인덱스에 포함할 하나 이상의 컬럼 |
| Unique | 이 인덱스가 unique 제약을 강제하는지 여부 |
- dropdown에서 컬럼을 선택합니다. 목록에는 현재 테이블에 정의된 모든 컬럼이 표시됩니다.
- 인덱스는 테이블과 함께 저장됩니다.
복합 인덱스
복합 인덱스는 여러 컬럼에 걸친 인덱스입니다. 여러 필드를 조합해 filter 또는 sort하는 쿼리에 유용합니다.
만드는 방법:
- + Add Index를 클릭합니다.
- 인덱스 이름을 입력합니다.
- dropdown에서 컬럼을 여러 개 추가합니다.
- 컬럼 순서는 query optimization에 영향을 주므로 가장 흔한 쿼리 패턴에 맞춰 정렬합니다.
예시
orders 테이블에서 status와 created_at으로 자주 조회한다면:
| 속성 | 값 |
|---|---|
| Name | idx_orders_status_created |
| Columns | status, created_at |
| Unique | No |
Unique 인덱스
Unique 체크박스를 켜면 같은 컬럼 조합을 가진 행이 두 개 이상 생기지 않도록 강제합니다.
| 테이블 | 컬럼 | 목적 |
|---|---|---|
users | email | 중복 이메일 방지 |
team_members | team_id, user_id | 중복 membership 방지 |
slugs | resource_type, slug | resource type별 slug 고유성 |
인덱스 편집과 삭제
Indexes 섹션에서 기존 인덱스를 클릭하면 펼쳐집니다. 이름 변경, 컬럼 추가/제거, unique flag 전환이 가능합니다. 삭제하려면 인덱스 row 옆 삭제 아이콘을 클릭합니다.
팁
idx_{table}_{columns}처럼 일관된 naming convention을 쓰면 migration script에서 찾기 쉽습니다.- 복합 인덱스에서는 선택도가 높은 컬럼을 앞에 두면 database optimizer가 효율적으로 선택하기 쉽습니다.
- 비즈니스 규칙은 애플리케이션뿐 아니라 unique index로 DB 레벨에서도 강제하세요.
- SQL export 시 인덱스는 생성되는 DDL에 포함됩니다.
- migration 파일에 이미 있더라도 ERD에 인덱스를 문서화하면 팀이 전체 구조를 한눈에 볼 수 있습니다.