출처 : 블로그 > 지혜로운 여성이 되자!!
원문 : http://blog.naver.com/feelingsil/40039375186
==================================================================
오랜만에 다시 대용량 데이타 베이스 강의를 듣기 시작했다..
시작하는 만큼 꼭 끝을 보고싶은데 노력 좀 해봐야지...
1. 속성과 릴레이션
위와 같이 직원 테이블과 부서테이블이 존재 한다.
기본적으로 emp 테이블의 empno,ename,salary,job 과 dept 테이블의 deptno,dname,location과 속성이라고 하고
emp 테이블의 deptno는 릴레이션이라고 한다.
위와 같이 릴레이션을 제거하고 참조하고자하는 속성(부서이름)을 해당 테이블의(emp)
속성으로 넣는 것은 반정규화이다.
위와 같은 경우엔 3정규화를 위배한 것이다.
*3정규형이란 어떤 릴레이션 R이 2NF(2정규형)이고 이 릴레이션의 모든 비주속성이 R의 어떤 키에도 이행적으로 종속하지 않을 때 R은 3NF(3정규형)에 속한다.
즉 속성끼리의 종속이 있으면 않 된다는 말이다.
위의 경우는 dname은 deptno에 종속므로 3정규화를 위배한 것이다.
반정규화를 시키면 느려진다.
예를 들어서 위 첫번째 그림의 db size가 emp가 1만건이고 가로 사이즈가 20k이고 dept가 100건 가로사이즈가 20b라고 할때 io는 block 단위로
1만건*20k+100rjs*20b = 대충 2m+3k이다.
하지만 두번째 그림과 같을때
40k*1만건 = 4m이다.
* nested loop join : 먼저 드라이빙 되는 테이블이 상수로 변한다.
* sort merge join
* hash join
db는 처음엔 phisical IO BLOCK에서 읽고 그 다음에 똑같은 요청이 들어왔을땐 메모리(버퍼캐쉬)에서 읽어온다.
DB의 포퍼먼스란 phisical io block를 줄이는 것이다.
모델링을 하는 이유: 고성능, 효율화, 효율적인 쿼리를 하기위해서~
인덱스가 없는 테이블이 먼저 drive된다.
이올린에 북마크하기
