본문 바로가기

공부/SQL

[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..
[liveSQL] 쿼리 변환, 서브 쿼리 Unnesting(1) 2020/02/09 - [공부/SQL] - [liveSQL] 실행계획 확인 1. 서브쿼리 - FROM 절의 서브쿼리 = 인라인뷰, 그 외 서브 쿼리라고 명침. 구분하기로 이 둘은 다른 것이라고 함. (SELECT 절의 서브 쿼리 = 스칼라 서브쿼리) (db가이드넷) '서브쿼리에서는 ordery by절을 사용할 수 없다. 그러나 인라인뷰에서 사용할 수 있다.' - IN, EXISTS 절의 서브쿼리 = 세미 조인 (ref.구루비) 대표 형태. 반면, WHERE a.id = b.id '일반 조인문'이라 함. - 현재 다룰 것은 세미조인 형태에서 unnesting 사례 2. Unnesting select * from A where id in (select id from B) /* Unnesting */ -> s..
[liveSQL] 윈도우 함수 (1) windowing 내 헷갈리는 몇가지 구문 2020/02/09 - [공부/SQL] - [liveSQL] 실행계획 확인 1.windowing 기본적 표현과 이해 - OVER 내 ORDER BY 쓸 때 사용됨. - rows : 물리적인 결과 행을 보겠다, range : 논리적인 값에 의한 결과 행을 보겠다 - unbounded : 단방향 - preceding : 음의 방향, following : 양의 방향 - current row : 레코드별 각 행 2. 예제 및 결과 테스트 (2.1) following과 preceding rows between current row and unbounded following : 현재 행에서 오른쪽 끝까지 위로부터 알 수 있는 것은, employee_id = 119의 unbounded following가 파티션 내의..