자격증 준비~
-
■ 기본 메커니즘 - 아래 사원과 고객 테이블이있다. 이 두 테이블에서 1996년 1월 1일 이후 입사한 사원이 관리하는 고객 테이터를 추출하는 프로그램을 작성해보자 - 일반적으로 NL조인은 Outer(선행)와 Inner(후행) 양쪽 테이블 모두 인덱스를 이용한다. Outer 테이블은 사이즈가 크지 않으면 인덱스를 사용하지않고 Table Full Scan을 하기도한다. Table Full Scan을 하더라도 한번에 그치기 때문이다. 반면 Inner 쪽 테이블은 인덱스를 사용해야 한다. Inner 루프에서는 관리사원번호 INDEX를 읽어야한다. 그렇지 않을시 Outer루프에서 읽은 건수만큼의 Table Full Scan을 반복하게된다. 1. 사원_X1 인덱스에서 입사일자 >= '19960101' 인 첫번째..
[친절한 SQL] NL 조인■ 기본 메커니즘 - 아래 사원과 고객 테이블이있다. 이 두 테이블에서 1996년 1월 1일 이후 입사한 사원이 관리하는 고객 테이터를 추출하는 프로그램을 작성해보자 - 일반적으로 NL조인은 Outer(선행)와 Inner(후행) 양쪽 테이블 모두 인덱스를 이용한다. Outer 테이블은 사이즈가 크지 않으면 인덱스를 사용하지않고 Table Full Scan을 하기도한다. Table Full Scan을 하더라도 한번에 그치기 때문이다. 반면 Inner 쪽 테이블은 인덱스를 사용해야 한다. Inner 루프에서는 관리사원번호 INDEX를 읽어야한다. 그렇지 않을시 Outer루프에서 읽은 건수만큼의 Table Full Scan을 반복하게된다. 1. 사원_X1 인덱스에서 입사일자 >= '19960101' 인 첫번째..
2021.11.01 -
실제 개발자들이 인덱스를 생성하다보면 이후에 중복된 인덱스들이 존재할 수도 있다고 한다. 이번에는 인덱스중에서 중복되는 역할을하는 인덱스를 찾아 제거하는 방법에 대해 공부해보았다. ■ 중복 인덱스 찾기 세 인덱스는 중복이다. X02 는 선두컬럼이 X01 인덱스 전체를 완전히 포함하고, X03 인덱스 선두 컬럼이 X01과 X02 인덱스 전체를 완전히 포함하기 때문이다. 필자는 이를 '완전 중복'이라고 부른다. X03 인덱스를 남기고, X01, X02 인덱스는 삭제해도 된다. 1) X01 : 계약ID + 청약일자 2) X02 : 계약ID + 청약일자 + 보험개시일자 3) X03 : 계약ID + 청약일자 + 보험개시일자 + 보험종료일자 ■ 중복제거 실습 • PK : 주소ID + 건물동번호 + 건물호번호 + 관..
[친절한 SQL] 중복 인덱스 제거실제 개발자들이 인덱스를 생성하다보면 이후에 중복된 인덱스들이 존재할 수도 있다고 한다. 이번에는 인덱스중에서 중복되는 역할을하는 인덱스를 찾아 제거하는 방법에 대해 공부해보았다. ■ 중복 인덱스 찾기 세 인덱스는 중복이다. X02 는 선두컬럼이 X01 인덱스 전체를 완전히 포함하고, X03 인덱스 선두 컬럼이 X01과 X02 인덱스 전체를 완전히 포함하기 때문이다. 필자는 이를 '완전 중복'이라고 부른다. X03 인덱스를 남기고, X01, X02 인덱스는 삭제해도 된다. 1) X01 : 계약ID + 청약일자 2) X02 : 계약ID + 청약일자 + 보험개시일자 3) X03 : 계약ID + 청약일자 + 보험개시일자 + 보험종료일자 ■ 중복제거 실습 • PK : 주소ID + 건물동번호 + 건물호번호 + 관..
2021.10.13 -
앞서 Between을 IN-List로 바꾸게 되면 성능이 향상되는 경우가 있는 것을 확인해보았다. 이번에는 BETWEEN 조건을 IN-List 조건으로 변환하면 도움이 되는 상황에서 조건절을 바꾸지 않고도 같은 효과를 낼 수 있는 Index Skip Scan을 활용해 볼 것이다. Between을 IN-List로 전환 2021.10.09 - [자격증 준비~] - [ 친절한 SQL] Between을 IN-List로 전환 이번엔 월별고객별 판매 집계 테이블을 생성하고 직접 테스트를 통해 확인해 보자. ■ TEST Data 생성 - 2018년도 1 ~ 12월까지 월별로 10만 개의 판매 데이터가 입력되도록 했다. 판매 구분 값 별로는 'A' 10만 개 / 'B' 110만 개다. SQL> create table ..
[친절한 SQL] Between vs IN-List vs Index Skip Scan앞서 Between을 IN-List로 바꾸게 되면 성능이 향상되는 경우가 있는 것을 확인해보았다. 이번에는 BETWEEN 조건을 IN-List 조건으로 변환하면 도움이 되는 상황에서 조건절을 바꾸지 않고도 같은 효과를 낼 수 있는 Index Skip Scan을 활용해 볼 것이다. Between을 IN-List로 전환 2021.10.09 - [자격증 준비~] - [ 친절한 SQL] Between을 IN-List로 전환 이번엔 월별고객별 판매 집계 테이블을 생성하고 직접 테스트를 통해 확인해 보자. ■ TEST Data 생성 - 2018년도 1 ~ 12월까지 월별로 10만 개의 판매 데이터가 입력되도록 했다. 판매 구분 값 별로는 'A' 10만 개 / 'B' 110만 개다. SQL> create table ..
2021.10.10 -
Between 조건절은 IN 조건절로 바꿔주면 큰 효과를 얻는 경우들이있다. ■ 예시 1) 기존 SQL select 해당층, 펑당가, 입력일, 해당동, 매물구분, 연사용일수, 중개업소코드 from 매물아파트매매 where 아파트시세코드 A01011350900056' and 평형 = '59' and 평형타입 = 'A' and 인터넷매물 between '1' and '3' order by 입 력 일 desc 2) IN-List 변환 SQL select 해당층, 평당가, 입력일, 해당동, 매물구분, 연사용일수, 중개업소코드 from 매물아파트매매 where 인터넷매물 in ( '1 ' , '2' , '3 ') and 아파트시세코드 A01011350900056 ' and 평형 = '59' and 평형타입 = '..
[ 친절한 SQL] Between을 IN-List로 전환Between 조건절은 IN 조건절로 바꿔주면 큰 효과를 얻는 경우들이있다. ■ 예시 1) 기존 SQL select 해당층, 펑당가, 입력일, 해당동, 매물구분, 연사용일수, 중개업소코드 from 매물아파트매매 where 아파트시세코드 A01011350900056' and 평형 = '59' and 평형타입 = 'A' and 인터넷매물 between '1' and '3' order by 입 력 일 desc 2) IN-List 변환 SQL select 해당층, 평당가, 입력일, 해당동, 매물구분, 연사용일수, 중개업소코드 from 매물아파트매매 where 인터넷매물 in ( '1 ' , '2' , '3 ') and 아파트시세코드 A01011350900056 ' and 평형 = '59' and 평형타입 = '..
2021.10.09