오늘 인덱스를 잘못 걸어서 외래키 인덱스로 인해 서버가 열리지 않은 트러블 슈팅이 발생했다.



테이블을 생성할 경우 기본키는 인덱스명이 primary라고 설정 되고, 외래키는 FK_이름(랜덤하게 생성)이 생성된다.
하지만, shows_user_id_IDX처럼 인덱스 이름을 지정했을 때는 그 해당하는 테이블의 entity에 가서
@Index('shows_user_id_IDX')
@Column({ type: 'int', name: 'user_id', unsigned: true })
userId: number;
이렇게 인덱스명을 명시해야 한다.
하지만 이런 방법은 좋은 방법이 아니므로, dbeaver에 들어가면 인덱스명을 볼 수 있다. IDX로 시작하는 외래키 인덱스는 높은 확률로 외래 키 충돌을 일으키므로 서버를 실행하는 데에 걸림돌이 된다.
IDX 와 관련이 있는 foreign keys를 먼저 지우고 그 다음에는 IDX_로 시작하는 인덱스를 지우면 된다. (외래키가 해당되는 테이블에서 unique가 아닐 경우)
직관적으로 이해를 한 것은.
FK : 외래키의 인덱스 명, 단 unique 값이 아니어야 한다.
IDX: unique 값의 인덱스 명, 외래키도 소속 테이블에서 unique 하면 IDX_로 시작한다.
PRIMARY: 고유 키이다.