ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자격증] SQLD( 봅시다
    카테고리 없음 2020. 1. 22. 07:46

    1. 정규화를 통한 성능 향상 전략 ​ 데이터 모델링을 하면서 정규화를 하는 것은 기본적으로 데이터의 중복성을 제거하고 주고 데이터가 관심사마다 처리되는 경우가 많기 때문에 성능이 향상된 특징을 가지고 있다. 물론 엔터티가 계속 발발하기 때문에 SQL 문장에서 조인이 많이 발발하고 그에 따른 성능 저하가 자신에게로 넘어가는 경우도 있지만, 이러한 부분은 사례별로 유의하여 반정규화를 적용하는 전략이 필요하다.정규화를 수행하면 상시 조회의 성능이 저하되어 자신이 나오는가?데이터 처리의 성능이 무엇인지 정확하게 구분하여 인식할 필요가 있다. 데이터베이스에서 데이터를 처리할 때의 성능이라고 하면 조회 성능과 입력/수정/삭제 성능의 2가지 부류로 나뉜다. 이 두 성능이 전체 우수하면 좋겠지만 데이터 모델을 구성하는 방식에 따라 두 성능이 Trade-Off가 되어 스스로 올라타는 경우가 많다.정규화를 한다는 것은 데이터를 판정하는 판정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로서 입력/수정/삭제 이상을 제거하는 것이었다. 데이터의 중복속성을 제거하고 판정자에 의해 같은 의미의 일반속성이 자신의 테이블에 집약되므로 한 테이블의 데이터 용량이 최소화 되는 효과가 있다. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 늦어질 수도 있는 특성이 있다.


    >


    ​[그림 Ⅰ-2-3]을 보면 정규화 실행 모델은 데이터를 입력·수정·삭제할 때 일반적으로 방 쵸은규화된 테이블에 비해서 처리 성능이 향상된다. 단, 데이터를 조회할 때는 처리 조건에 따라 조회 성능이 향상될 수도 있고 저하될 수도 있다.따라서 일반적으로 정규화가 잘 되어 있으면 입력/수정/삭제의 성능이 향상되고, 반정규화를 많이 하면 조회의 성능이 향상된다고 인식될 수 있다. 그러한 본인 데이터의 모델링을 실시할 때, 반정규화만이 조회 성능을 향상시킨다는 고정관념은 피해야 한다. 정규화해 성능이 떨어지기는커녕 정규화를 해야 성능이 향상되는 경우가 매우 많아 본인을 탄 것이 인기였기 때문이다.​ ​ 2. 방 쵸은규화된 테이블의 성능 저하의 사례하나 ​ 정규화되고 조인이 발발하면 성능이 심각하게 저하되는가? 다음 예를 보면 2차 규격화를 적용한 테이블에 조인을 해도 PK Unique Index를 이용하면 조인 성능 저하는 희미하게 발발하고 있다.


    >


    ​[그림 Ⅰ-2-4]의 왼쪽 그림은 2차 규격화되지 않은 밴 쵸은규화된 테이블의 모습으로 오른쪽 그림은 브붕키 종속을 정규화하는 두개의 테이블로 분리하여 2차 정규화된 테이블의 모습이었다 ​ 2차 규격화되지 않은 테이블은 직그프묘은과 함께 밴 쵸은규화된 간사이 번호, 그와은소묘은을 조회하면 아래 나쁘지 않아 테이블에서 데이터를 조회할 수 있다. 2차 정규화된 테이블은 간사이 번호, 간사이 이름이 간사이의 테이블에만 존재하기 때문에 두 테이블을 조인하고 처리해야 한다.정부 보관 금관서 원장으로부터 데이터를 조회하는 일은 일단 없으며, 관서와 정부 보관 금관서 원장을 조인하고 데이터를 조회하는 것은 나쁘지 않으며, 처리 성능은 사용자가 느끼기에는 조금도 차이가 나지 않는다. PK가 걸려 있는 방향으로 조인이 걸리고 Unique Index를 바로 찾아 데이터를 조회하기 위해 하나 없는 테이블에서 조회하는 작업과 비교할 때, 미미하게 성능 차이만 날 뿐 사용자에게 크게 영향을 줄 정도의 성능이 저하되는 하나는 없는 것이었다.또한 상기의 예를 '간사이 등록하지만 글씨가 20하나 0년 앞으로 관서를 전체 조회하는 '는 SQL구문을 처리하는 것으로 바꾸면 2차 정규화된 테이블이 훨씬 빠르다.​[그림 Ⅰ-2-5]의 모두 왼쪽 테이블에서는 불필요하게 납세자 번호 정도로 누적된 데이터를 읽고 결과를 구별해서 보이지 않으면 안 되지만, 오른쪽은 간사이의 수만 존재하는 데이터를 읽고 바로 즉시 결과를 보이고 주기 때문이었다 이러한 단순한 예를 봐도, 정규화를 수행하면 분명히 조합 성능이 저하된다는 고정 관념이 잘못된 것을 알 수 있다. ​ ​ 3. 방 쵸은규화된 테이블의 성능 저하 사례 2​ 두 엥토티이 통합되어 방 쵸은규화된 다른 경우를 살펴보고 있다. 이 업무에서는 어떤 물건을 팔 때 매각할 하나를 정하고 그 중 하나에 해당하는 매각 시간과 매각 장소가 판정된다. 즉 매각하지만 글씨가 판정자가 되어 매각 시간과 매각의 장소가 의존자가 되는 함수적 종속 관계가 형성되는 관계였던 팔리지만 자는 5천건, 하나쟈뵤루메각 것은 하나 00만건이 있는 것이 대가족이다.


    >


    ​ 예를 들면,[그림 Ⅰ-2-6]의 모델로 '서울 7호'에서 매각된 총 매각 금액 총 유찰 금액을 산출하는 조회용 SQL문장을 작성하면 다음과 같다.SELECT B. 총 매각 금액, B총류권 금액 FROM(SELECT DISTINCT의 매각 일정 FROM, 날짜별 매물 WHERE매각 장소='서울 7호')A,<==한 00만 건의 데이터를 읽고 DISTINCT함 매각, 날짜별 매각의 내역 B WHERE A. 매각일=B.매각 일시 ANDA. 매각 장소=B. 매각 장소;대량의 데이터에서 조인 조건과 대상을 찾으려고 인라인 뷰를 사용하는 성능이 저하된다. 이를 정규화하려면 복합 식별자 중의 일반 속성이 주식별자 속성의 일부에만 종속 관계를 가지고 있어 2차 규격화의 대상이 된다. 2차 규격화를 적용하면[그림 Ⅰ-2-7] 같은 모델이 된다.


    >


    ​ 2차 규격화를 적용하고 매각 일정을 PK에 매각 때 테로그와 매각 장소는 일반 속성이 됬다. 정규화를 적용했기 때문에 매각일자를 PK로 사용하는 매각일자별 매각내역과도 관련이 있다. 그래서 업무의 흐름에 따른 정확한 데이터 모델링 표기도 가능한 드라이빙이 된 테이블 이 5천건의 매각 기일의 테이블이 되므로 성능도 향상된다.만약 위의 모델로 '서울 7호'에서 매각된 총 매각 금액 총 유찰 금액을 산출하는 조회용 SQL문장을 작성하면 다음과 함께 나온다.SELECT B. 총 매각 금액, B"총 유찰 금액 FROM매각 기일 A매각 날짜별 매각 내역 BWHEREA".매각 장소='서울 7호'<==5천건의 데이터를 릴소리 AND A. 매각 날짜=B. 매각 일시 ANDA. 매각 장소=B. 매각 장소:​ 매각 기일의 테이블이 정규화되고 드라이빙 대상 테이블의 데이터가 5천건으로 줄어 조회 처리가 빨라진다.​ ​ 4. 방 쵸은규화된 테이블의 성능 저하 사례 3차의 사례는 동일한 속성의 형식을 두개 이상의 속성에 나열하고 반정 규화한 경우에 해당하는 것입니다. 계층형 데이터베이스를 많이 사용한 과거의 데이터 모델링의 연습이 남아서인지, 관계형 데이터베이스에서도 동일한 속성을 한 테이블에 속성인, 속성 2, 속성 3데이터 모델링을 하는 경우가 많다.[그림 Ⅰ-2-8]을 보면 모델이라는 테이블에 업무적으로 필요한 8개의 인덱스가 앞서고 발발하고 있다. 데이터는 30만건이 온라인 환경의 데이터베이스와 가족이다. 유형 기능 분류 코드에 의해서 데이터를 조회하는 경우가 많이 나타나고 인덱스를 발발하려면 유형 기능 분류 코우드 각각에 대해서, 인덱스를 발발해야 하기 때문에 9개나 되는 인덱스를 추가 발발해야 하거든요.


    >



    >


    그래서 한 테이블에 인덱스가 많고 육조회의 성능은 향상되지만 데이터 입력/수정/삭제 성능은 저하된다. 그래서 일반 업무 처리(온라인성 업무)은 인덱스의 수를 되도록 7~8개가 넘지 않는 게 좋아. 그런데[그림 Ⅰ-2-8]의 모델은 다른 필요한 인덱스 이외에 유형 기능 분류 코드 속성에 해당되는 인덱스를 9가지 나쁜 없는 추가적으로 발생해야 하기 때문에 실전 프로젝트에서는 어쩔 수 없이 인덱스를 발생하고 있앙고나프지앙, A유형 기능 분류 코우드 1아래 나쁘지 않지만 인덱스를 발생하는 경우가 생긴다. 이로써 A형 기능 분류 코드 1, A유형 기능 분류 코우드 2, A유형 기능 분류 코드 3...을 이용하면 SQL의 성능이 저하하는 경우가 많다.만약 각 타입 코드마다 조건을 달고 모델 코드와 모델명을 조회하는 SQL문장을 작성하면 이 밧줄과 함께 나쁘지 않다. ​ SELECT모델 코드, 모델명 FROM모델 WHERE(A유형 기능 분류 코우드 1='01')OR(B유형 기능 분류 코우드 2='02')OR(C형 기능 분류 코드 3='07')OR(D형 기능 분류 코드 4='01')OR(E유형 기능 분류 코드 5='02')OR(F형 기능 분류 코드 6='07')OR(G형 기능 분류 코드 7='03')OR(H형 기능 분류 코우드 8='09')OR(I유형 기능 분류 코우드 9='09')​ 각 유형별로 전체의 인덱스가 걸리지 않으면 인덱스에 의해서 데이터를 찾을 수 있다. 이러한모델은이강의와함께정규화를적용해야합니다.중복 속성에 대한 분리가 1차 규격화 쵸은우이이을 감안하면 모델 테이블이 1차 규격화의 대상이 된다. 로우 단위의 대상도 1차 규격화의 대상이 되지만 칼럼 단위로 중복이 되는 경우도 1차 규격화의 대상이 된다. 그래서 모델에 대해서 1차 규격화를 적용하면[그림 Ⅰ-2-9]와 더불어 분리될 수 있다.


    >


    ​ 하 쟈싱의 테이블에 9개가 반복 쟈싱 욜이 되고 있을 때는 인덱스 생성이 어려웠지만, 정규화되고 분리된 이후에는 인덱스 추가 생성이 0개가 됐다. 또한 분리된 테이블 모델 기능 분류 코드에서 PK 인덱스를 생성하여 이용함으로써 성능을 향상시킬 수 있다.만약 각 유형 코드마다 조건을 붙여 모델 코드와 모델명을 조회하는 SQL 문장을 작성하면 향후와 함께 작성된다.​ SELECT A. 모델 코드, A. 모델명 FROM모델 A모델 기능 분류 코우드 B WHERE(B. 유형 코드='A'AND B. 기능 분류 코드='0하나'AND A. 모델 코드=B. 모델 코드)OR(B. 유형 코드='B'AND B. 기능 분류 코드='02'AND A. 모델 코드=B. 모델 코드)OR(B. 유형 코드='C'AND B. 기능 분류 코드='07'AND A. 모델 코드=B. 모델 코드)OR(B. 유형 코드='D'AND B. 기능 분류 코드='0하나'AND A. 모델 코드=B. 모델 코드)OR(B. 유형 코드='E'AND B. 기능 분류 코드='02'AND A. 모델 코드=B. 모델 코드)OR(B. 유형 코드='F'AND B. 기능 분류 고-도='07'AND A. 모델 코드=B. 모델 코드)OR(B. 유형 코드='G'AND B. 기능 분류 코드='03'AND A. 모델 코드=B. 모델 코드)OR(B. 유형 코드='H'AND B. 기능 분류 코드='09'AND A. 모델 코드=B. 모델 코드)OR(B. 유형 코드='I'AND B. 기능 분류 코드='09'AND A. 모델 코드=B. 모델 코드)​ 위 SQL구문은 타입 코드+기능 분류 코드+모델 코드에 인덱스가 걸렸기 때문에 인덱스를 통해서 데이터를 조회함으로써 성능이 향상된다.실전 프로젝트에서도 많은 데이터 모델이 칼럼 단위로 중복되는 경우가 발견된다. 이에 대한 파급 효과의 계산 없이 꼭 칼럼 단위로 COL한개, COL2, COL3... 이와 같이 데이터 모델링을 하는 것은 근본적으로 SQL문의 성능을 자신있게 결과를 가져올 수도 있으므로 인덱스 생성의 영향도를 파악한 후에 적용하는 것이 좋다.​ ​ 5. 방 쵸은규화된 테이블의 성능 저하 사례 4​[그림 Ⅰ-2이외 0] 같은 경우도 마찬가지의 사례였다


    >


    ​ 1의 재고와 1의 재고 상세를 구분함으로써 1의 재고에 발발한 트랜잭션의 성능 저하를 예방할 수 있게 됐다.​ ​ 6. 함수적 종속성(Functional Dependency)에 근거한 정규화 수행 필요 ​ 함수 종속성(Functional Dependency)는 데이터가 어느 기준치로 인한 종속되는 현상을 말하는 것 임니다니다. 이 때 기준치를 자결자(Determinant)라고 부르고, 종속되는 값에 종속자(Dependent)라고 할 것이다.


    >


    ​[그림 Ⅰ-2-쵸쯔쵸쯔]에서 보면 사람이란 엥토티는 주민 등록 번호, 이름, 출생지, 호주 등 속성이 존재한다. 여기서 이름, 출생지, 호주라는 속성은 주민등록번호 속성에 종속한다. 만약 어떤 사람의 주민등록번호가 신고되면 그 사람의 이름, 출생지, 호주가 발생하고 오직 하과인의 값만 갖게 된다. 이를 기호로 표시하면 다음과 같이 표현할 수 있다.주민등록번호(이름, 출생지, 호주) 즉 주민등록번호가 이름, 출생지, 호주를 함수적으로 결정한다고 내용이 적혀 있다. 실세계의 데이터는 대부분 고란함수 종속성을 가지고 있다.함수의 종속성은 데이터가 가지고 있는 근본적인 속성으로 인식되고 있다. 정규화의 궁극적인 목적은 반복적인 데이터를 분리하여 각 데이터가 종속된 테이블에 적절히 (프로세스에 의해 데이터의 정합성이 지켜지는 것) 배치되도록 하는 것이며, 이 함수의 종속성을 이용해 정규화 작업이 과민한 각 오브젝트에 속성을 배치하는 작업에 이용되는 것이었다.기본적으로 데이터는 속성간의 함수 종속성에 증거하여 정규화되어야 한다. 프로젝트 수행의 정규화는 선택이 아니라 필수였다 데이터의 구조를 함수적 종속관계에 의해 정규화의 사상에 맞추어 분리하는 것은 마치 건축물을 세울 때의 부실공사를 방지하기 위해서 하중, 균형, 내구성을 고려한 기본적인 설계를 하는 것과 같다. 정규화 이론은 건축에 의해 지역의 기본적인 설계 원칙과 마찬가지로 이과인 중요한 이론이었던 프로젝트에서 정규화가 적용된 모델을 설계하기 위해서는 정규화에 대한 기본이론을 정확하고 구체적으로 이해하고 있어야 한다. 전문적인 IT프로젝트를 진행하는 설계자가 정규화의 이론을 모르고 데이터 모델링을 설계하는 것은 불가능하다. 눈이 먼 사람이 감각에 따라 길을 찾아가는 것과 같다. 분명히 자신이 갈 길을 명확히 검증할 수 있도록 지도를 가지고 길을 가도록 정규화의 이론을 숙지하고, 정보시스템의 근간인 데이터를 설계해야 한다.


    댓글

Designed by Tistory.