조인을 할때 where절에서 1. 특정 칼럼(인덱스..pk,중복키,결합키등 조건을 지정.. 우선순위는 점조건->선분조건)을 정함으로서 

dmbs가 해당 테이블에서 어떠한 로우에 엑세스해서 임시메모리에 올릴지 알려줘서 dbms가 실제 파일 데이터를 엑세스할 범위를 좁히고 , 2.추출된 임시 테이블의 로우(or인스턴스들) 에 대해 조인을 할 부모 테이블 전체(모든 row) 조회할때, 해당 컬럼의 값을 조건 연산자로 추가(일반적으로 교집합 AND) 해줌으로서 내가 전달 받을 결과인 n개의 테이블에서 추출한 교집합 resultset를 만들어 내는것!

(ex) 직원 테이블을 자식 테이블로 해서 뒤에 지정할 조건에 일치하는 모든 직원의 사번과 이름을 가져오는데  .. 조건1.부서가
 "경리부"일인 모든 직원들에 대해(직원테이블과 부서테이블의 AND 교집합인 임시 테이블.. 해당 부서 테이블에 엑세스할때도 인
덱스정보(fk가 pk이냐..uk이냐..중복키이냐에 따라 다양한 결과 발생) -> 조건2. 조건 1에서 추출한 임시 테이블에 대해 연봉이 "5000만원" 이상일것(직급,호봉별로 연봉이 정해져 있다면 연봉 테이블이 존재할테고.. 테이블을 어떻게 설계했느냐에 따라 다를테지만, 또한 1에서 추출한 임시 테이블에 대해 AND 교집합)


*************************************************
인덱스를 결정한다에 대해 고민을 더 해보자.. 

예를 들어
파일에 dataMatrix[ROW][COL] 이 있을때..

해당 데이터를 어떻게 접근해야 디스크 i/o 효율이 좋을까? 행단위 , 열단위?
for(int row = 0; row < rows.size; row++) <-- 엑세스 단위로서 outter
    for(int col = 0; col < cols.size; col++) <-- 엑세스 단위로서 inner
        data = dataMatrix[row][col];    VS  data = dataMatrix[col][row]; 

위의 고민이 테이블간 조인에서 outter, inner 의 결정에 따른 퍼포먼스적 고민이라 생각한다.

(etc)
배열의 경우는 생성한 인스턴스들의 주소가 물리적으로 연결된 자료구조이지만, 연결리스트의 경운 인스턴스 간에 
물리적으로는 제각각의 위치이지만, 논리적으로 연결된 자료구조이며, 맵,셋등의 계열은 인스턴스 간에 물리적으로 
제각각의 위치이지만, 그것이 저장된 실제 주소를 배열로서(인덱스) 관리하는 자료구조이며, 트리의 경우(이진 밸런스의 경우)
엔 배열 자체의 시작점 -> 종료점(0~50000인덱스)까지 해당 index를 찾는 접근 방법이 아닌, 내가 찾는 인덱스가 
31234 라면   0~25000까지의 노드, 25000~50000까지의 노드중 우측 노드로 분할 정복하여 다음 단계(재귀)
에서는 25000~37500까지의 노드, 37500~50000까지의 노드중 좌측 노드로 분할 정복하여 다음 단계(재귀)
에서는 25000~31250까지의 노드, 31250~37500까지의 노드중 좌측 노드로 분할 ...(생략) 

식으로 자료의 양이 많아질경우 퍼포먼스가 자료의 수에 대해 log 자료의 수 로서 일정 값에 수렴하게 된다. (로그 = 루트의
개념 vs 지수 = 제곱근의 개념)


******************************************************

파일에 대한 엑세스를 최소화 한다는 것에 대해 고민을 해보자.

파일을 읽어와 메모리에 적재할때 i/o최소화를 통한 효율 상승을 위해 인접 블럭 단위로 크게 읽어와 메모리에 적재한다.

이 개념은 resultSet을 만들때 selete 절을 어떻게 구성할 것이며, from절에서 조인하려는 테이블에 대해 제한 조건을 줄것
이며, where 절에선 from절에서 추출한 임시 테이블에 AND 서브쿼리의 결과를 통해 얻어진 

추후 생각나면 정리.. 급한일 생김 -_-;


by givingsheart 2014. 1. 2. 09:09