목록원리와 해법 (36)
정미나닷컴
Index Range Scan - B*Tree 인덱스의 가장 일반적이고 정상적인 형태의 액세스 방식(수직적 탐색 후 필요한 범위만 수평적 탐색) - 항상 빠른 속도를 보장하진 않음 - 인덱스 스캔 범위를 얼만큼 줄일 수 있느냐, 테이블 액세스 횟수를 얼만큼 줄일 수 있느냐가 관건 => 인덱스 설계와 SQL 튜닝의 핵심 원리 - 인덱스를 구성하는 선두 컬럼이 조건절에 사용되어야 함 Index Full Scan - 수직적 탐색없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식 - 최적의 인덱스가 없을 때 차선책(인덱스 선두 컬럼이 조건절에 없을 경우) - 최종 결과값이 적을때 Table Full Scan보다 Index Full Scan이 훨씬 효율적 Index Unique Scan - 수직적 ..
쿼리의 조건절에 인덱스 선두 컬럼이 사용된 경우(인덱스가 B*Tree 형태일 때)옵티마이저는 인덱스의 Root부터 탐색을 시작해 Branch를 거쳐 원하는 레코드 키값이 존재하는 Leaf 까지 도달한다. 이 때 Root -> Branch -> Leaf 에 도달하는 과정(Leaf node의 시작점을 찾는 과정)을 수직적 탐색,Leaf node의 시작점에서부터 원하는 범위까지를 scan하는 과정(인덱스는 정렬 상태이므로)을 수평적 탐색,수평적 탐색을 통해 get한 RowID를 이용해 궁극적으로 원하는 데이터가 있는(Select 절에 명시된 컬럼 데이터) 테이블까지 도달하는 과정을 Table Random Access라고 한다. 하지만 주의해야 할 점은 조건절에 인덱스 컬럼을 사용한다고 해서 무조건 인덱스 활용..
B*Tree Index (B: Balanced)- 인덱스 Root에서 Leaf Block까지 어떤 값으로 탐색하더라도 읽는 Block 수가 동일 (Root로 부터 모든 Leaf Block 까지의 높이가 동일) 위 그림을 보면서 처음에 Root Block과 Branch Block에 있는 KEY 값 때문에 헷갈렸는데 저기에 나타난 KI나 BER, FO, JONES 등등의 값은 테이블 레코드 값이라기 보다는 범위를 의미한다. 다시 말해 KI는 > KI 를 의미하고 BER는 > BER 를 의미한다. Root Block & Branch Block - 저장 엔트리: {KEY:DBA(하위 노드의 Data Block Address)} * 여기에 저장된 KEY 값은 테이블 레코드의 KEY 값이 아닌 하위 노드의 범위를 ..
INNER JOIN- 가장 일반적인 JOIN 형태- 두 개 이상의 테이블의 공통 컬럼을 JOIN 조건으로 만들어 데이터 조회- JOIN에 참여하는 두 컬럼은 동일한 데이터 타입(필수사항은 아님)- WHERE 절에는 일반 조건과 JOIN 조건을 병행 사용 가능- SELF JOIN > 자기 자신과 JOIN- ANTI JOIN > NOT IN 연산자를 사용한 JOIN- SEMI JOIN > EXISTS 연산자를 사용한 JOINSELECT A.EVENT_NO, B.CUST_NO FROM TEVENT A, TCUSTOMER B WHERE A.CUST_ID = B.CUST_ID;▶ 이벤트에 참여한 고객의 데이터 출력 Outer JOIN- 두 테이블에서 어느 한 테이블의 데이터가 없을 경우, 전체 row수를 보존하면..