Study/Oracle 4

쿼리 성능 측정시 체크 리스트 정리

쿼리 성능을 측정하고자 할때 기본적으로 아래의 리스트를 체크해보도록 한다. 인덱스 스캔 관련 체크리스트 1. 인덱스 사용이 가능한가? - where 연락처 is null 처럼 null 조건만 있는 경우, 인덱스 사용이 불가능하다. - 쿼리에서 참조하는 컬럼들은 인덱스 안에 저장되어 있어야 한다. 2. 인덱스 범위 스캔이 가능한가? - 부정형 비교의 경우 인덱스 사용이 불가능하다. where 직업 '학생' where 직업 is not null - 인덱스 컬럼을 가공한 경우 인덱스 사용이 불가능하다. - 묵시적 형 변환을 한 경우 > 숫자형과 문자형이 비교될 때 숫자형이 우선시 되기 때문에 컬럼 타입과 맞춰주어야 한다. http://wiki.gurubee.net/pages/viewpage.action?pag..

Study/Oracle 2022.03.19

조인의 개념과 실행 절차

조인의 수행은 기본적으로 두 테이블씩 이루어진다. 두개씩 조인 후 나온 실행 결과 set 을 가지고 또 다른 테이블과 조인을 한다. Cartesian Product Select e.name, d.dname from emp e cross join depth d; Cartesian product는 조인 조건 없이 하는 Cross Join으로써 위와 같이 tab1의 row 수 * tab2의 로우 수 만큼 데이터가 출력된다. 이런 조인 조건은 Group by 에서 사용하던 rollup, cube나 grouping sets로 구현하는 것을 구현할 수 있다. ROLL_UP select deptno, job, sum(sal) as total from emp where deptno in ( 10, 20) group b..

Study/Oracle 2022.03.19

조인 기법과 조인 수행 원리

위와 같이 테이블과 인덱스 설정이 있다고 가정해보자. 모든 이미지 출처는 https://www.youtube.com/watch?v=13Yga-pv-ls&t=190s 이다. 전광철님 감사합니다. Nested Loop Join 하나의 테이블을 기준으로 각 row를 추출하고, 그때마다 순차적으로 상대 테이블에서 연관된 row들을 JOIN에 의해 추출하는 방식. 3번과 4번 작업을 보면 모두 Dept 테이블에서 이루어지고 있다. 첫번째로 풀스캔을 뜨면서 인덱스에 해당하는 값들을 Index Dept_index로 추출하고, 3번과 4번의 결과를 2번의 Nested Loop 작업으로 Join 연산을 하고 있다. 그 이후에 EMP테이블과 Join을 하는 과정을 1번 작업에서 해주고 있는 것이다. 따라서 튜닝을 할 때는..

Study/Oracle 2022.03.18

Oracle의 B-Tree Index

오라클에서 사용하는 인덱스 중 가장 기본적인 인덱스인 B-Tree Index에 대해 알아보자. B-Tree Index : Balanced Tree Index B - tree 인덱스는 계층구조를 가지고 있으며 Leaf, Internal(Branch) , Root 노드로 나뉜다. 리프 노도들은 소팅된 가운데 자기들끼리 연결되어 있다. 브랜치 노드는 리프 노드들에 인덱스 값을 전달하기 위해 분류와 분기를 위한 기준값만 저장한다. 비트리 인덱스는 널값을 제외하고 모든 인덱스 컬럼의 데이터 + 로우아이디를 리프노드에 정렬해서 저장한다(디폴트는 오름차순). 이때 로우아이디에는 Objext, File, Block, Row에 대한 정보를 가지고 있기 때문에, 블락을 찾아갈 수 있게 되는 것이다. -> Single Bl..

Study/Oracle 2022.03.18