본문 바로가기
관리자

Programming-[Backend]/Database

JPA, ddl-auto, MYSQL, index 등 테이블 생성 기초 정리

728x90
반응형

 

 

Spring Boot + JPA + Hibernate + MYSQL 조합으로 DB를 구축할 때 주의해야할 점들에 대해 기록해둔다.

 

1. Index는 카디널리티가 높은 순대로, 컴포지트 형태로 짤 것

여러 컬럼들에 대해 각각의 index를 잡으면 비효율적이다. 각 인덱스를 DB에서 독립적으로 관리해야할 뿐만 아니라 쿼리 실행 시마다 각각의 인덱스를 조합해야하기 때문이다. DB 옵티마이저가 비효율적으로 작성된 인덱스를 조합하지 않고 무시하는 경우도 많다.

 

인덱스를 작성할 때, 카디널리티가 높은 순서대로 작성한다. 그리고 보통 많이 사용하는 type등 종류가 몇 개 안되는, 즉 카디널리티가 낮은 컬럼이 있는 경우 옵티마이저에 의해 무시될 수도 있다. DB 컬럼의 순서는 PK, FK, 카디널리티가 높은 순서대로 배치하고 날짜 등 Range로 조회될 가능성이 있는 컬럼들은 뒤쪽에 배치해야한다.

 

 

2. Varchar(255) 이상은 text로 작성 가능

varchar(255)가 넘어가면 mysql의 경우 참조하는 키를 본래 테이블에 두고, 실제 내용은 외부에 작성한다. 이는 Text 타입으로 컬럼을 작성한 경우와 같다. 따라서 그냥 Text로 작성해줘도 무방하다.

 

 

3. comment

각 컬럼을 설명하는 comment는 왠만하면 써준다. 컬럼의 목적이 이름만으로 완벽하지 않은 경우에는 써주는 것이 좋다.

 

 

4. id 값은 unsigned 붙이기

예를 들어 int로 작성하는 경우, 약 -21억 ~ 21억의 범위를 갖는다. 그런데 unsigned를 붙여서 양수만 사용할 것이라고 선언하면 약 42억까지도 사용이 가능하다.

 

 

5. enum 사용하지 않기 (MYSQL)

ddl-auto로 create하는 경우 @Enumerated 어노테이션이 붙은 컬럼은 MYSQL의 enum 타입으로 생성된다. 이를 Varchar로 변경하는 것이 좋다. enum의 종류가 코드에서 늘어나면 DB에서도 업데이트가 필요하고, 이는 관리의 요소일 뿐만 아니라 데이터가 많아지면 변경이 어려워지는 상황이 올 수도 있기 때문이다.

 

 

728x90
반응형