-
PK 컬럼 순서, 대충 하지 말자Technique/RDBMS 2015. 12. 20. 21:13반응형
데이터베이스를 생성할 때 [ 분석-> 설계-> 구축-> 테스트-> 이행 ]의 프로세스를 거치는데 설계 단계 이후 완성된 데이터 모델을 토대로, 물리적인 테이블을 정해진 DBMS에 맞게 생성하게 된다.
보통 사용화된 데이터 모델링 툴 을 이용해 모델을 만들고 DDL(Data Definition Language) 을 생성하기 때문에 설계 단계에서 데이터베이스를 생성할 때 PK 컬럼의 순서는 그다지 신경쓰지 않고 생성하게 되는 경우가 많다.
PK의 순서를 신경쓰지 않은채 테이블을 만들 시 발생할 수 있는 문제
- 인덱스 구성에서 의도하지 않은 순서의 Primary Key Unique Index가 생성된다
- 그에 따른 조회 SQL 실행 시 성능 저하 현상이 나타날 수 있다
- 많은 인덱스가 생성되므로 입력/수정/삭제 시 불필요한 내무 작업이 증가해 성능에 악 영향을 끼친다.
인덱스의 정렬 구조를 고려, SQL을 설계
WHERE절에 '='이나, 'Between', '<','>' 등을 분석하여 PK 컬럼을 범위가 들어오는 조건부터 앞쪽으로 위치 시킴
이미 만들어지느 PK인덱스가 전혀 사용되지 않는다면 입력, 수정, 삭제시 불필요한 인덱스로 인해 성능이 더 저하되어 좋지 않음
최적화된 인덱스 생성을 위해서는 PK 순서 변경을 통해서 인덱스를 생성하는 것이 바람직함
설계 단계를 마치기 전 데이터 모델링을 수행할 때 PK 컬럼 순서를 반드시 검토하여 조정해야 한다
데이터 모델의 OK 순서가 아무런 의미가 없는 것 같지만, 실전 프로젝트에서는 의미 없는 PK 순서 떄무에 성능이 저하되는 경우가 아주 빈번하게 발생한다.
성능 저하 현상이 일어난 원인이 PK가 여러 개의 속성으로 구성도니 복합식별자일 떄 PK 순서에 대해 별로 고려하지 않고 데이터 모델링을 했기 때문인 경우가 많다.
인덱스는 가급적이면 '=' 로 접근 하는게 좋으며
혹시 범위( between 이나 <, > )를 사용하게 될 경우엔 최소한의 범위를 사용하는게 좋다.
반응형'Technique > RDBMS' 카테고리의 다른 글
[ 메모 ] is null 을 사용한 order by (0) 2016.03.31 Primary Key, Unique Index 에 대하여 (0) 2015.12.23 엔티티타입, 통합? 분리? (0) 2015.12.23 이력 유형 데이터 모델링 (0) 2015.12.21 식별자관계와 비식별자관계 설정 (0) 2015.12.21