본문 바로가기

livesql

[liveSQL] 인덱스, 정렬 작업 대체 가능 1. 정렬 작업 대체 가능 * 인덱스를 이용해 대체하기 위해서는 인덱스 컬럼 구성과 똑같은 order by 절에 기술해야함.(후행 컬럼은 누락 가능) ~ 단, 인덱스 구성 컬럼이 조건절에서 '='연산자로 비교된다면 ordery by절에서 누락가능, 인덱스와 다른 순서로 ordery by절 내 기술 가능 2. 확인 compoite index : [ c1, c2 ] 2.1 선행컬럼이 order by에 인덱스 순서와 동일한 경우 -> 소트 연산 대체 가능 (1) [ 소트 연산 대체 ] WHERE c1 = AND c2
[liveSQL] 조인 - 외부 조인, 3가지 표현 방법 1. 외부 조인 참조하려는 대상이 참조 테이블에 반드시 있음을 예상하지 못 할 때 사용하는 조인 방법임 (표현식1) [ LEFT | RIGHT | FULL ] OUTER JOIN 표현 (표현식2) 참조하는 테이블 (+) = 참조되는 테이블 (표현식3) 스칼라 서브쿼리식 표현 2. 표현 방법 (총 3가지 표현) //(+)식 표현 SELECT a.id, a.name, b.location FROM A a, B b WHERE a.id (+)= b.id; //OUTER JOIN 표현 SELECT a.id, a.name, b.location FROM A a LEFT OUTER JOIN B b ON a.id = b.id; //스칼 서브 쿼리식 표현 SELECT a.id, a.name, (SELECT location ..
[liveSQL] 조인 - Hash Semi 조인, 조건문에 따른 실행계획 차이 1. Hash Semi Join과 Filter Semi Join '=' 이외에 연산이 추가되면 어떻게 동작을 하나. 아울러서 'Filter' 형 Semi Join과 헷갈리는 부분(둘다 In, Exists 사용하므로) 해소. 2. 실행 결과 //Hash SJ 대표적인 형태 SELECT - FROM A a WHERE EXISTS (SELECT 'x' FROM B b WHERE a.id = b.id AND other condition) //저기서 //"other condition" 부분을 추가하는 것으로, //차이를 알아보고자 함. (1) '='만 사용 (2.1) '(1)' + 서브 쿼리 문내 조건절 추가(uncorrated, corrated) - corralted..
[liveSQL] 쿼리 변환, 서브쿼리 Unnesting(2) 2020/02/27 - [공부/SQL] - [liveSQL] 쿼리 변환, 서브 쿼리 Unnesting(1) 1. 서브 쿼리 Unnesting 내부 실행계획의 차이 서브 쿼리 Unnesting을 시행할 때, 서브 쿼리 내에 PK/FK 인덱스, Unique 인덱스가 없으면 옵티마이저는 서브 쿼리를 풀어내지 않는다. 그럼에도 불구하고, 사용자가 풀어내려고 했을 때 driving table이 메인/서브 테이블에 따라 동작을 달리 한다는 것이 앞서 말한 내용임. 그런데, 이 때 인덱스(not unique, not PK/FK)를 추가적으로 생성하여 실행했을 경우 내부 실행계획이 달라졌기 때문에 이해 아닌 이해를 해보기로 함.(oracle의 옵티마이저 동작 방식을 그저 외워버리는 것이므로) 2. 지난 결과문 (unn..