SQLD

[SQLD 자격증] 1과목 2 - 데이터 모델과 성능 오답노트

요다다 2023. 2. 14. 19:14

개인적인 정리입니다.

 

31. 성능 데이터 모델링에 대한 설명 틀린 것 찾기

데이터 증가가 빠를수록 비용 증가

성능을 튜닝하면서 데이터모델이 변경될 수 있음

분석/설계 단계에서 데이터 모델링을 하면 rework비용 최소화

틀린 것 : 성능이 저하된 결과를 대상으로 문제 발생 시점의 SQL을 중심으로 집중하여 튜닝을 하기보다는 애초 설계 단계의 데이터모델링때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것이 좋음

 

32. 데이터모델링 순서 빈칸찾기

1) 정규화 수행

2) 용량 산정하기

3) 트랜잭션 유형 파악하기

4) 용량과 트랜잭션 유형에 따른 반정규화 진행

5) 조정 후 최종적 데이터 모델 검증

 

33. 데이터모델링 순서는 위와 같음

 

34. 성능 데이터 모델링의 고려 사항 중 틀린 것 찾기

이력 데이터는 시간에 따라 발생하여 대량 대이터일 가능성이 높아 성능을 고려하여 칼럼을 추가하는 등의 설계가 필요

틀린 것 : 정규화는 항상 성능저하를 나타낸다.는 것이 틀림.

정규화는 조회할 땐, 성능이 향상되는 방법임. 입력/삭제일 때, 성능이 저하될 수도 있긴 함.

 

35. 엔터티 그림을 보고 어떤 정규화가 필요한지 ?

복합키의 부분 집합이 다른 키를 결정하기 때문에, 함수 종속성을 제거해야함. 그러므로 2차 정규화가 필요하다

 

36. 엔터티 그림을 보고 설명 맞는 것 찾기

답 : 2차 정규화가 필요한 엔터티로서 매각기일과 일자별매각물건으로 1:M 관계가 될 수 있다.

2차 정규화가 필요한 건 알겠는데, 1:1인지 1:m인지 헷갈렸다. 

1:m인 이유는 매각기일이 일자별 매각물건에서 떨어져 나왔기 때문에 1:m이라고 한다. (하나의 매각기일에 여러 물건을 매각할 수 있기 때문이기도 하다) 

 

이는 정규화를 통해 성능을 향상시킨 경우이다. 특정 장소에 해당하는 매각일자를 찾아 1:1로 조인하면 되기 때문에 I/O를 감소할 수 있어 성능이 향상될 것이다.

 

(틀) 37. 그림에서 나타날 수 있는 현상 중 적절한 것은 ?

그림에서 동일한 유형의 속성이 컬럼단위로 반복되는 것은 속성의 원자성을 위배한 1차 정규화가 필요한 대상이다.

그러므로 1번(제 1정규형이다)는 틀린 것,

2번(PK와 이에 대한 인덱스만 있으면 SQL문장은 빠르게 수행될 수 있다)가 왜 틀린거지?

모든 반복 속성에 대해 인덱스를 정의하면 검색 속도는 좋아줘도 입력,수정,삭제의 성능은 저 1하되므로 올바른 방법이 아니다.

3번(제 2정규형이다)는 틀린 것. 1정규형도 아닌데 2정규형이겠냐구 

그렇게 답은 4번이다. 이유는

반복적인 속성을 가지고 있다면, 속성을 겹치므로 도메인의 원자성에 위배한다. 따라서 1차 정규화를 수행하자

 

(틀) 38. 다음 엔터티에 대한 설명으로 적절한 것은 ?

그림으로 봤을 때, 수량과 기간에 의해 반복되는 컬럼이 존재한다. 그러므로 1차 정규화가 필요할 것

그럼 이제 1:1일지, 1:M일지 따져봐야 하는데, 정답은 1:M인데....정확히 이유를 모르겠다.

 

39.다음 정규형과 정규형의 대상으로 바르게 짝지어진 것은 ?

PK의 부분집합이 다른 것을 결정하고 있으므로 2차 정규형을 위배하므로 이는 1차 정규형, 2차 정규화 대상이다.

 

(틀) 40. 반정규화를 고려할 때 판단요소에 대한 설명으로 적절한 것은 ?

다량의 데이터 탐색은 인덱스가 아닌 다양한 물리적 기법을 활용하여 성능을 개선한다. BUT, 하나의 결과셋을 추출하기 위해 다량의 데이터를 탐색하는 처리가 반복적으로 일어난다면 이는 반정규화를 고려하자 !

3번 틀린 이유 : 이전 이후 위치의 레코드를 탐색하는 경우 window function으로 접근 가능하다.

4번 틀린 이유 : 집계 테이블 이외에도 다른 테이블에서도 반정규화가 필요할 수 있다.

 

41. 하나의 테이블 전체 컬럼 중 자주 이용하는 집중화된 칼럼이 있을 때, 반정규화 기법으로 적당한 것은?

부분 테이블 추가 : 디스크 I/O를 줄이기 위해 해당 칼럼들을 별도로 모아놓는 테이블을 만드는 반정규화 기법

 

42. 칼럼에 대한 반정규화 기법으로 틀린 것은?

중복칼럼 추가 - 조인감소를 위해 여러 테이블에 동일한 컬럼 추가 O

파생칼럼 추가 - 조회 성능을 위해 계산한 칼럼을 추가 O

FK에 대한 속성 추가 - FK에 대한 속성 추가는 반정규화가 아닌 데이터 모델링에서 관계를 연결할 때 나타나는 자연스러운 현상이다

이력테이블에 기능 칼럼 추가 - 최신 값을 처리하는 이력 특성을 고려해 기능성 칼럼 추가 O

 

 

43. 아래 SELECT문을 시행할 때, 조회를 빠르게 수행하기 위한 반정규화 기법으로 적당한 것은 ?

 SELECT SUM(단가) ~~GROUP BY 주문번호. 이므로 주문번호별 단가의 합을 구하기 위해서

주문 엔터티에 단가의 합을 계산한 칼럼을 추가하면 효과적인 반정규화이다. 

 

(틀) 44. 아래 데이터 모델에 대한 설명으로 틀린 것 ?

그림을 보면, 대량의 데이터를 지닌 테이블이다.

전화번호, 메일주소, 위치가 자주 변경되고, 

 

1번 틀린 이유 : 최근에 변경된 값만 조회할 경우 과도한 조인으로 인해 성능이 저하된다.

맞는 설명 :

과도한 조인으로 인해 성능이 저하될 수 있으므로, 자주 조회하는 값을 모아 반정규화를 하여 조회성능을 높인다. 

자주 변경되니깐, 최신여부라는 속성을 두어 조회 성능 저하를 예방하자

이력의 형태로 설계하면 용량이 커진다는 단점 존재

 

(맞았지만 헷갈림) 45. 칼럼수가 많은 테이블에 대한 설명으로 적절한 것은 ?

한 테이블에 많은 칼럼이 존재하면, 데이터가 디스크 안에 넓게 분포하여 디스크 I/O가 대량으로 발생 => 성능 저하

따라서 트랜잭션이 접근하는 칼럼유형을 분석해서 자주 접근하는 컬럼: 그렇지 않은 컬럼 으로 분리해준다

NULL이 많으면 NULL을 뒤로 모아둠으로써 로우의 길이를 줄일 수 있으나, 나중에 데이터가 채워진다면 로우체이닝이 발생할 수 있다!!!!! 그렇기에 바람직한 해결방법이 아님. 

그러니깐 유형을 분석해서 적절하게 분리하자

 

(틀) 46. 빈칸채우기

테이블에 적용하는 기법으로,

하나의 테이블에 많은 양의 데이터가 저장되면 인덱스를 추가하고 테이블을 쪼개도 성능이 저하될 수 있다. 

이 때, 논리적으로는 하나의 테이블이지만, 물리적으로는 여러 개의 테이블로 분리하여 성능을 개선하는 기법이다

 

=> 파티셔닝

 

(틀) 47. 아래 SQL문에 대해 개선해야할 점은 ?

이거 진짜 헷갈려서(다 맞는 것 같아서) 답을 체크하지도 못했음

우선, 문제 상황은 9월 5일에 발생한 사건 번호를 추출하는데, 긴급사건 테이블과 특수사건 테이블과 일반사건 테이블에서 각각 같은 조건의 값을 셀렉트하는 경우이다.

1번 틀린 이유는 UNION은 개별조회에 따른 시간 소요와 이걸 조합하는 시간에 따라 성능 저하가 발생한다

3번이 틀린 이유는 사건분류코드를 PK에 포함했기 때문이다.

4번이 틀린 이유는 .. 아돈노...통합 테이블을 따로 생성하는건 용량과 같은 문제로 당연히 저하되지 않을까라고 생각하지만 정확한 이유를 모르겠다

 

=> 맞는 설명 : 테이블을 통합하고, PK를 사건분류코드+사건번호 로 지정한다

 

(틀) 48. 데이터모델의 슈퍼타입과 서브타입 데이터모델을 물리적인 테이블 형식으로 변환할 때 틀린 것은 ?

슈퍼타입 : 테이블을 하나로 뭉침

서브타입 : 테이블을 여러개로 쪼갬

트랜잭션은 항상 전체를 통하하여 분석 처리하는데, 슈퍼-서브 타입이 하나의 테이블로 통합되어 있으면

하나의 테이블에서 데이터를 읽어올 수 있기 때문에 성능이 좋아진다.