간단명료
[문제] 상식적으로 부등호가 등호보다 시간이 더 오래걸려야 맞는데 시간이 오히려 더 빨랐다 --소요시간 300ms /*+ index(A index_a) index(B index_b) */ SELECT* FROMTABLE A, TABLE B WHEREA.COLUMN1 = B.COLUMNS ANDA.COLUMN2 > '20230728' -- 소요시간 30sec /*+ index(A index_a) index(B index_b) */ SELECT* FROMTABLE A, TABLE B WHEREA.COLUMN1 = B.COLUMNS ANDA.COLUMN2 = '20230731' 상식적으로 말이 안됐다. 그래서 플랜을 봤다. --소요시간 300ms /*+ index(A index_a) index(B index_..

4.4.1 서브쿼리 변환이 필요한 이유 최근 옵티마이저는 비용을 평가하고 실행계획을 생성하기에 앞서, 사용자로부터 전달받은 SQL을 최적화에 유리한 형태로 변환하는 작업, 쿼리변환부터 진행한다. 쿼리변환은 옵티마이저가 SQL을 분석해 같은 결과 집합을 생성하면서도 더 나은 성능이 기대되는 형태로 재작성하는 것을 말한다. 서브쿼리는 하나의 SQL문 안에 괄호로 묶은 별도의 쿼리 블록을 말한다. 인라인 뷰(Inline View) : FROM 절에 사용한 서브쿼리. 중첩된 서브쿼리(Nested Subquery) : WHERE 절에 사용한 서브쿼리. 메인쿼리 컬럼을 참조하는 형태를 상관관계 있는(Correlated) 서브쿼리 라고 부른다. 스칼라 서브쿼리(Scalar Subquery) : 한 레코드 당 정확히 ..

1. NL조인의 튜닝 포인트 테이블 간의 조인 횟수를 최소화하기 위한 조인 순서 최적화 Driven 테이블의 경우 연결고리 인덱스가 반드시 사용되어야 한다 2. NL조인의 장단점 - 장점 인덱스를 통한 랜덤액세스기반에서 좋은 성능을 보임 - 단점 인덱스가 없는 경우 속도 저하 대용량데이터를 처리할 경우 성능 저하 3. 조인 순서 제어 방법 - 힌트사용 ORDERED 와 LEADING 을 같이 사용한 경우 LEADING은 무시된다. ORDERED FROM 절에 기술한 테이블 순서대로 제어 SELECT /*+ ORDERED USE_NL(a,b) */ A.id, B.name FROM table_a a, table_b b WHERE a.joinkey_a = b.joinkey_b AND a.color = '..

SELECT, WHERE, ORDER BY 절에 사용하는 서브쿼리를 스칼라서브쿼리라고 한다. 서브쿼리는 GROUP BY 절에는 사용할 수 없다. SELECT (SELECT....) --Scalar Subquery FROM (SELECT....) --Inline View WHERE (SELECT....) --Nested Subquery OR Correlated Subquery(Scalar Subquery) GROUP BY --사용 불가 ORDER BY (SELECT....) --Scalar Subquery1. WHERE 절 서브쿼리 WHERE 절 서브쿼리(스칼라서브쿼리)에서 메인쿼리 컬럼을 사용하지 않으면 Nested Subquery, 메인쿼리 컬럼을 사용하면 Correlated Subqyery라 한다. ..

1. 인덱스를 사용하지 말아야 하는 경우 분포도가 좋지 않을 경우 FULL TABLE SCAN이 더 나을 수 있다. 처리 데이터가 전체 데이터 중 15% 이상일 경우 FULL SCAN이 더 나을 수 있다. 2. 인덱스 사용이 불가능한 경우 1) NOT 연산자 사용 !=, : 제외한 모든 데이터를 추출하기 때문에 인덱스보다 FULL TABLE SCAN이 더 나을 수 있다. 2) IS NULL, IS NOT NULL 사용 인덱스는 NULL 값을 저장하지 않는다. 3) 옵티마이저의 취사 선택 RBO : 정해진 규칙 기준 CBO : 비용 기준 으로 취사 선택. Hint를 통해 제어할 수 있다. 4) External suppressing - 인덱스 컬럼 변형 불필요한 함수 사용 WHERE SUBSTR(ename,..