본문 바로가기
반응형

Database34

패스트캠퍼스 SQL튜닝캠프 4일차 - 조인의 기본 원리와 활용 조인 알고리즘오라클은 아래의 3개 조인 알고리즘을 모두 지원하지만 MySQL에서는 NestedLoop조인만 지원합니다.1. Nested Loop 조인이름 그대로 중첩반복을 사용하는 조인 알고리즘입니다.(출처: SQL 레벨업)위 그림을 참고하여 Nested Loop 조인의 실행순서는 아래와 같습니다.Table A에서 row를 하나씩 반복해가며 스캔합니다. 이 테이블을 Driving Table 혹은 Outer Table이라 합니다. 반대로 Table B (반대편)는 Inner Table이라 합니다.Driving Table의 row 하나마다 내부 테이블의 레코드를 하나씩 스캔해서 Join 조건에 맞으면 리턴합니다.1~2를 Driving Table의 모든 row에 반복합니다.Nested Loop의 실행시간은 다.. 2017. 8. 25.
패스트캠퍼스 SQL튜닝캠프 3일차 - 인덱스 스캔 효율 8. (4) Index Skip Scan을 이용한 비효율 해소Index Skip Scan을 통해 인덱스를 좀 더 효율적으로 사용하는 경우와 방법을 진행해보겠습니다.고객번호, 판매월, 판매구분, 판매금액으로 이루어진 월별고객판매집계 테이블이 있다고 가정합니다. 이때 판매구분 + 판매월을 기준으로 조회해야 할때 어떻게 개선할 수 있을지 확인해보겠습니다.케이스1. 인덱스: 판매구분 + 판매월인덱스를 판매구분 + 판매월로 잡아 수행해보겠습니다.인덱스 : 판매구분 + 판매월 select count(*) from 월별고객판매집계 t where 판매구분 = 'A' and 판매월 between 200801 and 200812실행계획을 수행해보면 ConsistencyRead(LogicalRead)는 281이 나옵니다.... 2017. 8. 23.
패스트캠퍼스 SQL튜닝캠프 2일차 - 인덱스 향상 5. 테이블 Random Access 부하 인덱스를 쓰는 이유는 RowId를 찾기 위함 RowId는 HDD에 있음 RowId를 해시 함수로 돌려 Clustering Factor 테이블 블럭들이 인덱스 정렬 순으로 얼마나 잘 정렬되어있는지에 대한 지표 6. 테이블 Random 액세스 최소화 튜닝 인덱스가 많을 때의 단점 Command(명령 : 등록/수정/삭제)시 인덱스 변경이 필요하여 시간이 많이 소모 인덱스 저장 장소가 필요하여 저장소 용량이 많이 필요하게 됨 옵티마이저가 인덱스를 보고 실행계획을 작성하는데, 이때 인덱스가 많으면 많을수록 옵티마이저는 잘못된 실행계획을 생성할 확률이 높다. 인덱스는 3개 이하를 권장한다. 인덱스 컬럼 추가로 해결하기 문제상황) 인덱스 : deptno + job selec.. 2017. 7. 30.
패스트캠퍼스 SQL튜닝캠프 1일차 - 인덱스 구조와 스캔 방식 1주차1. 인덱스의 구조인덱스 == 정렬인덱스는 크게 해시 인덱스와 B+Tree 인덱스가 있습니다. 해시 인덱스는 키 값을 해시값으로 변경후, 해시값+값의 구조를 얘기합니다. 해시계산의 경우 데이터 양에 의존하지 않기 때문에 데이터 양이 늘어도 계산량(O(1))은 변경되지 않는다는 장점이 있습니다. 하지만 아래와 같은 경우에 전혀 사용할 수 없습니다.가격이 10,000원 이하의 선물을 찾고 싶다.제목이 "Final"로 시작하는 게임 리스트를 찾고 싶다.최신순으로 정렬된 값을 찾고 싶다.해시 인덱스의 이런 단점을 해결하고자 B+Tree 인덱스 구조가 있습니다.B+Tree 인덱스(출처 : 구루비 위키)Root Node와 Branch Node에 표기된 lmc는 Left Most Child를 뜻합니다. (Lea.. 2017. 7. 16.

728x90
반응형