데이터 모델 측면에서의 검토
- 튜닝 과정에서 조사된 SQL에 group by, union, distinct 같은 연산자가 불필요하게 많이
사용되는 패턴을 보인다면 대게 데이터 모델이 잘 정규화되지 않았음을 암시한다.
사례 1
- M:M 관계를 갖도록 테이블을 설계한 경우가 대표적이다.
- 잘못된 데이터 모델링으로 인하여 group by를 사용하지 않아도 되는 경우에도
M:M으로 표시되어서 불필요한 group by를 사용하고 있었음
사례 2
- PK 외에 관리할 속성이 아예 없거나 소수일 때, 테이블 개수를 줄인다는 이유로 자식 테이블에
통합시키는 경우를 종종 볼 수 있다.
사례 3
- 순번 컬럼을 증가시키면서 순서대로 데이터를 적재하는 점이력 모델은 선분이력에 비해
DML 부하를 최소화할 수 있는 장점이 있지만, 대량 집합의 이력을 조회할 때 소트를 많이
발생시키는 단점이 있다.특히, 마지막 이력만 조회하는 업무가 대부분 일 때 비효율이 크다.
- 비효율이 있다고 해서 모델이 잘못됐다고 말할 수는 없지만 어떤 데이터 모델을 선택하느냐에
따라 성능에 차이가 생길 수 있음을 잘 보여준다.
* 나는 아직도 점 이력모델이 선분이력에 비해 DML 부하를 최소할 수 있다는 것이
어떠한 케이스에서 설명 될 수 있는지 모르겠다.
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 5-5. 인덱스를 이용한 소트 연산 대체 (0) | 2016.12.26 |
---|---|
성능고도화 5-4. 소트가 발생하지 않도록 SQL 작성 (0) | 2016.12.26 |
성능고도화 5-2. 소트를 발생시키는 오퍼레이션 (0) | 2016.12.26 |
성능고도화 5-1. 소트 수행 원리 (0) | 2016.12.26 |
성능고도화 4-12 기타 쿼리 변환 (0) | 2016.12.26 |