본문 바로가기

오라클20

[Oracle] 테이블 조인 튜닝 (ordered, leading) 1.ordered ordered 힌트는 FROM 절에서 기술한 테이블 순서대로 조인합니다. 조인 순서에 따라 실행 계획이 달라지는 것을 볼 수 있습니다. SELECT /*+ ordered */ E.DEPTNO , E.EMPNO , D.DNAME FROM DEPT D , EMP E WHERE D.DEPTNO = E.DEPTNO ; SELECT /*+ ordered */ E.DEPTNO , E.EMPNO , D.DNAME FROM EMP E , DEPT D WHERE D.DEPTNO = E.DEPTNO ; 2. leading leading 힌트 안에 쓴 테이블 순서대로 조인합니다. leading도 위와 마찬가지로 실행 계획을 정할 수 있습니다. SELECT /*+ leading(D E) */ E.DEPTNO.. 2019. 6. 24.
[Oracle] 결합알고리즘과 성능 1. Nested Loops SQL에서 결합 연산을 수행할 때 내부적으로 선택되는 알고리즘을 바탕으로 결합에 대해서 알아보겠습니다. 결합 알고리즘의 가장 기본이되는 Nested Loops는 이름 그대로 중첩 반복을 사용하는 알고리즘입니다. SQL에서 결합은 한 번에 두 개 의 테이블만 결합하므로 본질적으로 이중 반복과 같은 의미입니다. ● 결합 대상 테이블에서 레코드를 하나씩 반복해가며 스캔합니다. 이 테이블을 구동테이블 또는 외부 테이블이라고 부릅니다. 다른 테이블은 내부 테이블이라고 합니다. ● 구동 테이블의 레코드 하나마다 내부 테이블의 레코드를 하나씩 스캔해서 결합 조건에 맞으면 리턴합니다. ● 이러한 작동을 구동 테이블의 모든 레코드에 반복합니다. ● 한 번의 단계에서 처리하는 레코드 수가 적으.. 2019. 6. 24.
[Oracle] 집계와 조건 분기 1. 집계와 조건 분기 집계를 수행하는 쿼리를 작성할 때, 쓸데없이 길어지는 경우를 자주 볼 수 있습니다. 다음과 같은 Population 테이블을 생각해 봅시다. 성별 1은 남자, 2는 여성을 의미한다고 가정하겠습니다. prefecture(지역 이름) sex(성별) pop(인구) 성남 1 60 성남 2 40 수원 1 90 수원 2 100 광명 1 100 광명 2 50 일산 1 100 일산 2 100 용인 1 20 용인 2 200 다음이 우리가 원하는 결과 입니다. 2. UNION을 사용한 집계 절차 지향적으로 문제를 풀 때 남성의 인구를 지역별로 구하고, 여성의 인구를 지역별로 구한 뒤 합치는 방법을 생각할 것 입니다. 남성과 여성의 인구가 별도의 레코드로 나오게 됩니다. 그리고 GROUP BY를 사용.. 2019. 6. 10.
[Oracle] 윈도우 함수 윈도우 함수 윈도우 함수는 굉장히 중요한 기능입니다. 윈도우 함수는 데이터를 가공하게 해준다는 점에서도 중요하지만, 성능과 큰 관계가 있습니다. 윈도우 함수의 특징을 한마디로 정의하면 '집약 기능이 없는 GROUP BY 구'입니다. GROUP BY 구는 자르기와 집약이라는 두 개의 기능으로 구분됩니다. 윈도우 함수는 여기서 자르기 기능만 있는 것입니다. 윈도우 함수도 테이블을 자르는 것은 GROUP BY와 같습니다. 윈도우 함수는 이를 'PARTITION BY'라는 구로 수행합니다. 차이점이 있다면 자른 후에 집약하지 않으므로 출력 결과의 레코드 수가 입력되는 테이블의 레코드 수와 같다는 것입니다. 윈도우 함수의 기본적인 구문은 집약 함수 뒤에 OVER 구를 작성하고, 내부에 자를 키를 지정하는 PART.. 2019. 6. 10.
[Oracle] 집합 연산 1. SQL 집합 연산 1.1 UNION으로 합집합 구하기 집합 연산에서는 만약 ADDRESS 테이블과 ADDRESS2 테이블의 합집합을 구할 때는 UNION이라는 합이라는 연산자를 사용합니다. SELECT * FROM ADDRESS UNION SELECT * FROM ADDRESS2; 문자 그대로 2개의 테이블을 하나의 테이블로 합친 결과가 나옵니다. 여기서 기억해야 할 점 하나는 만약 ADDRESS 테이블에는 6개의 레코드가 있고, ADDRESS2 테이블에는 9개의 레코드가 있다고해서 2개를 합친 결과가 15개가 나오지 않을 수 있다는 것 입니다. 바로 중복해서 존재하는 레코드를 제거합니다. 이는 INTERSECT와 EXCEPT 등에서도 같습니다. 만약 중복을 제거하고 싶지 않다면 'UNION ALL.. 2019. 6. 10.
[Oracle] SQL 구문의 성능을 결정하는 실행 계획 1. 실행 계획 확인 방법 SQL 구문의 지연이 발생했을 때 제일 먼저 실행 계획을 살펴봐야합니다. 다음과 같은 3개의 기본적인 SQL 구문의 실행 계획을 살펴보겠습니다. ● 테이블 풀 스캔의 실행 계획 ● 인덱스 스캔의 실행 계획 ● 간단한 테이블 결합의 실행 계획 오라클의 경우 실행 계획을 확인하는 명령어는 다음과 같습니다. SET AUTOTRACE TRACEONLY 실행 계획에 공통적으로 나타나는 부분은 조작 대상 객체, 객체에 대한 조작의 종류, 조작 대상이 되는 레코드 수 등이 나타납니다. 그만큼 중요한 부분이라는 것입니다. 조작 대상 객체를 살펴보면, 오라클은 Name 필드에 테이블 이름이 출력됩니다. 어떤 객체를 조작하는지 혼동하지 않게 주의가 필요합니다. 또한 이 부분은 테이블 이외에도 인.. 2019. 6. 10.