인덱스

ClassBinu·2024년 5월 21일

F-lab

목록 보기
32/65

뭐야.. 인덱스 이렇게 간단하게 만들 수 있는 거였어?

import { Entity, PrimaryGeneratedColumn, Column, Index } from "typeorm"

@Entity()
export class User {
    @PrimaryGeneratedColumn()
    id: number

    @Index()
    @Column()
    firstName: string
  
  	@Index({ unique: true }) // 유니크 제약 걸 수 있음
    @Column()
    MiddleName: string

    @Column()
    @Index("name2-idx") // 이름 커스텀도 가능
    lastName: string
}
  • 유니크 인덱스는 데이터 삽입이나 업데이트 시 중복된 값이 있을 경우 에러를 발생시키므로, 애플리케이션 로직에서 이를 적절히 처리해야 합니다.
  • 인덱스는 데이터베이스의 저장 공간을 추가로 사용하므로, 필요한 경우에만 사용하는 것이 좋습니다.

다중 컬럼 인덱스

이렇게 걸 수도 있음.

import { Entity, PrimaryGeneratedColumn, Column, Index } from "typeorm"

@Entity()
@Index(["firstName", "lastName"])
@Index(["firstName", "middleName", "lastName"], { unique: true })
export class User {
    @PrimaryGeneratedColumn()
    id: number

    @Column()
    firstName: string

    @Column()
    middleName: string

    @Column()
    lastName: string
}

이건 단일 컬럼이 아닌 여러 복합 컬럼에 대한 인덱스 테이블을 생성하는 것

공간 인덱스

@Entity()
export class Thing {
    @Column("point")
    @Index({ spatial: true })
    point: string
}

동기화

@Entity()
@Index("POST_NAME_INDEX", { synchronize: false })
export class Post {
@PrimaryGeneratedColumn()
id: number

@Column()
name: string

}

스키마 변경시 동기화 옵션이 켜져 있으면 편하긴 한데 예상치 못한 변경이나 데이터 손실 발생할 수 있음.
옵션 끄고 수동으로 관리하기.
왜냐면 TypeORM은 일부 옵션은 지원하지 않음.

0개의 댓글