반응형
이번 포스팅에서는 쿼리 별로 JOIN이 어떻게 인덱스를 사용하는지에 대해 자세히 알아 볼 예정이다. 드라이빙 테이블과 드리븐 테이블설명하기 앞서 드라이빙 테이블과 드리븐 테이블을 이해할 필요가 있다. 드라이빙 테이블 (Driving Table)조인이 실행될 때 첫 번째로 액세스되는 테이블선행 테이블(Outer Table)이라고도 부름쿼리의 성능에 큰 영향을 미침일반적으로 더 작은 결과 집합을 반환하는 테이블이 드라이빙 테이블로 선택되는 것이 유리 드리븐 테이블 (Driven Table)드라이빙 테이블에서 읽힌 데이터를 기준으로 조인되는 테이블후행 테이블(Inner Table)이라고도 부름드라이빙 테이블의 각 레코드마다 접근됨 좀더 쉬운 이해를 위해 아래 쿼리를 살펴보자.SELECT *FROM employ..
어떤 경우에 인덱스를 사용하게 유도할지 말지를 판단하려면 어떻게 인덱스를 이용해서 실제 레코드를 읽는지 알 필요가 있다.MySQL이 인덱스를 이용하는 대표적인 3가지 방법을 알아보자. 인덱스 레인지 스캔가장 대표적인 인덱스 접근 방식으로 나머지 방법 중 가장 빠른 방법이다.인덱스 레인지 스캔은 검색해야 할 인덱스의 범위가 결정됐을 때 사용하는 방식이다. B-Tree 인덱스에서는 루트와 브랜치 노드를 이용해 스캔 시작 위치를 검색하고 그 지점부터 필요한 방향으로 인덱스를 읽어 나간다.인덱스 자체가 정렬되어 있기 때문에 이런 범위 검색 또한 빠르고 정렬된 상태로 레코드를 가져온다. 인덱스 레인지 스캔의 순서를 살펴보면 다음과 같다.인덱스에서 조건을 만족하는 값이 저장된 위치를 찾는다. (인덱스 탐색)1번에서..
B-Tree란?B-Tree란 RDBMS에서 가장 많이 사용되는 Self Balanced Tree (자가 균형 이진 검색 트리)로대량의 데이터를 효율적으로 저장하고 검색하기 위해 고안된 O(logN)의 시간 복잡도를 갖는 자료 구조이다. B-Tree는 이진 트리(Binary Search)에서 여러 가지 면에서 확장된 구조이다.이진 트리와 b-tree의 차이를 한번 가볍게 살펴보자. 이진 트리 vs B-Tree이진 트리각 노드는 최대 두 개의 자식(왼쪽, 오른쪽)을 가질 수 있다.B-Tree각 노드는 최대 m개의 자식을 가질 수 있으며, m은 B-Tree의 차수(각 노드가 지닌 가지의 수)이다.위 비교를 보면 B-Tree는 더 많은 자식을 가질 수 있는 것을 볼 수 있다.이는 곧 B-Tree가 노드당 하나..