[교육] SQL 교육 2

버버니야·2022년 3월 28일
0

복습
Nested Loop

Select 부서코드, 부서명, 사원번호, 사원명
FROM 부서 A, 사원 B
where a.부서코드 = b.부서코드

Q. Access 순서는? (두 테이블은 pk만 존재)
조인을 하려면 한쪽은 무조건 풀스캔이 들어감.
더 연산이 적은 쪽으로 액세스
사원 테이블이 먼저 드라이빙이 된다.

사원의 부서코드를 인덱스를 걸어준다면 부서 테이블을 먼저 드라이빙할 수 잇음.
인덱스는 후행 테이블에 있어야 한다. (필터조건이 없다면)

select 부서코드, 부서명, 사원번호, 사원명
form 부서 A, 사원 B
where a.부서코드 = b.부서코드
and b.사원명 = '정아나' (사원.사원명 인덱스 존재)

select 부서코드, 부서명, 사원번호, 사원명
form 부서 A, 사원 B
where a.부서코드 = b.부서코드
뭉 a.부서명 = '배우팀' (부서.부서명 인덱스 존재)

foreign키는 인덱스를 해놓는게 좋음


1:N 조인할 때 1의 결과만을 조회하는 경우

Parent(1) / Child(N)을 확인하기
SELECT 절에 속한 컬럼 확인
모두 Parent에만 속하는 경우 중복제거를 위한 (inner / left otuer) group by 혹은 distinct를 사용하는지 확인해 semi join 형태로 변경

SEMIN JOIN 후하면 1:N에서 1의 개수만큼 나옴 (액세스 양을 줄이면서 쿼리 실행)

1:N 에서는 N을 최대한 접근하지 않는 방법으로 시간을 줄일 수 있다.


GROUP BY가 없으면 결과가 중복된다.
select는 1쪽만한다.

이럴때는 튜닝이 필요! -> JOIN을 semi join으로 바꿀 수 있다.

모든 경우를 출력할때 LEFT를 쓰기도 함

INDEX

MYSQL에서는 기본적으로 B-Tree 형태의 인덱스 구조를 사용
Balanced Tree 모든 레벨의 리프가 같은 레이어

거의 모든 DBMS가 B-tree 구조를 사용
리프노드는 Dobule Linked list로 연결되어 있다.
PK 기준으로 정렬되어 있음

InnoDB

InnoDB 엔진은 B-Tree를 기본으로 클러스터형 인덱스 구조를 가짐

Clustered Key - PK를 기준으로
Non-Clustered Key - PK를 기준으로 하지 않음

Non-clustered 인덱스를 타고 PK를 참조

3.3 복합인덱스

두개 이상이 복합해서 인덱스를 구성
선행부터 인덱스를 탄다.

선행조건이 '=' 조건 후행조건이 Range로 하는 것이 좋음
Range가 unique해서 정렬하기가 쉽지않음.

3.5 형변환

자료형이 다를때 인덱스를 탈까?

  • select * from cust where ordr_no = '1';
    숫자와 문자가 만날때는 형변환 우선순위에 따라 높은쪽으로 형 변환을 한다.
    숫자가 더 우선순위가 높아서 문자를 숫자로 형변환
    '1' 은 숫자 1로 변환해서 인덱스를 타게된다.

  • select * from cust where ordr_stauts_cd = 10;
    숫자가 문자가 만나 문자->숫자 인덱스가 varchar값으로 되어있어 인덱스를 타지 않고 풀스캔을 하게된다.(인덱스 테이블에 없는 값으로 인식)

  • '2011-02-17' 이 datetime으로 형변환해서 인덱스 탐

  • 형변환을 명시적으로 했기때문에 인데스 탐

  • 자른 문자열은 인덱스에 없기 때문에 인덱스 못탄다. -> 부등호를 이용하면 인덱스를 탈 수 잇다.

변수쪽에서 형변환이 일어나면 인덱스를 못탄다.

3.7 Null은 인덱싱이 될까?

MySQL은 NUll 값도 인덱싱 처리가 된다.
하나의 값으로 인식하기 때문

4.4 LIMIT

limit 절은 full scan 이나 index scan 시 조건에 맞는 개수를 만족하면 중단

UNION [ALL] ~ order by

order by시 인덱스를 사용할 수 없으므로 언제나 filesort를 유발
filesort가 되며 index 사용불가

filesort가 무조건 잘못된 것은 아니다. 인덱스도 공간의 낭비 및 삽입의 시간 증가 등 단점도 있듯, 일반적으로 어쩔수없는 경우도 존재한다. 그것을 없애는 것이 튜닝 포인트

profile
안녕하세요

0개의 댓글