일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- springboot
- RabbitMQ
- enablekafkastreams
- statestore
- play framework
- kafkastream
- spring-batch
- scala 2.10
- 한빛미디어
- 플레이 프레임워크
- kafkastreams
- spring-cloud-stream
- gradle
- kafka interactive query
- Spring
- schema registry
- avo
- coursera
- spring-kafka
- Logstash
- Kafka
- Elasticsearch
- aws
- scala
- Slick
- 카프카
- Elk
- reactive
- confluent
- kafka streams
- Today
- Total
b
7.4.6. JOIN 본문
7.4.6 JOIN
* JOIN의 순서와 인덱스
인덱스 탐색(Index seek) => 인덱스 스캔(Index scan) => 최종 레코드 Read
(일반적으로 가장 먼저 읽히는 테이블을 '드라이빙 테이블'이라 하고 가끔은 아우터 테이블을 드라이빙 테이블이라 하기도 한다)
- 드라이빙 테이블을 읽을 때는 '인덱스 탐색'1번 -> 스캔만 계속 실행
- 드리븐 테이블은 '탐색', '스캔'을 레코드 건수만큼 반복한다.
-- 그래서 1:1로 조인되더라도 드리븐 테이블을 읽는것이 훨씬 부하가 크다.
-- 그래서 옵티마이저는 '드리븐 테이블'을 최적으로 읽을 수 있게 최적화한다.
* JOIN 칼럼의 데이터 타입
- JOIN 에서도 각 칼럼의 타입이 일치하지 않으면 인덱스가 효율적이지 않다.
* OUTER JOIN의 주의사항
OUTER로 조인되는 테이블의 칼럼에 대한 조건은 모두 ON 절에 명시해야한다.
* INNER JOIN과 OUTER JOIN의 선택
- INNER : 조인의 양쪽 테이블에 모두 존재하는 경우만 반환
- OUTER : OUTER에 존재하면 무조건 반환한다.
- OUTER가 느리다는 편견은 버려라, 성능의 차이는 거의 없다. 중요한것은 업무rule에 따라 선택하는것.
* FULL OUTER JOIN 구현
- MySQL은 FULL OUTER JOIN을 제공하지 않는다, 단 UNION으로 효과를 비슷하게 구현할 수 있다.
- 두 테이블을 OUTER 조인을 연결해서 UNION 으로 더하면 된다.
- UNION은 중복제거를 하기 때문에, 각 OUTER JOIN에서 중복을 제거하고 UNION ALL을 하면 좀 더 빠르다.
* 조인 순서로 인한 쿼리 실패
- MySQL은 ANSI 표준으로 INNER JOIN, LEFT JOIN을 제공한다 ANSI 표준에서는 반드시 JOIN 키워드의 좌우측에 명시된 테이블의 칼럼만 ON 절에 사용가능
- A-B-C순서로 INNER JOIN을 할 경우는 순서에 맞춰서 A-B ==> A or B - C 순으로 JOIN 해야한다.
* JOIN과 FOREIGN KEY
- FOREIGN KEY와 JOIN은 아무런 연관이 없다. FK의 주 목적은 무결성을 보장하기 위해서이다.
* 지연된 조인(Delayed Join)
- 지연된 조인이란 조인이 실행되기 전 GroupBy/OrderBy를 처리하는 방식을 의미(Limit가 특히 큰 효과)
- 할수있는 모든 수행을 다하고 마지막에 join을 하면 JOIN 횟수를 줄일 수 있다.
*** 페이징에 관한 이슈 457 Page 꼭 참고할것 , 지연된 조인!***
'RealMysql' 카테고리의 다른 글
Mysql partition 사용이유,제한,주의사항등... (2) | 2013.09.25 |
---|---|
7.4.7 GROUP BY, ORDER BY, 7.4.9 서브쿼리 (0) | 2013.01.07 |
[기타] MySQL InnoDB Engine 사용 시 반드시 알아야 할 세 가지 (0) | 2013.01.04 |
7.4.SELECT ( 7.4.3 WHERE ~ 7.4.5 LIMIT ) (0) | 2012.12.11 |
7.4 SELECT ( 7.4.1 SELECT 처리순서 ~ 7.4.2 GROUP BY, ORDER BY) (1) | 2012.12.09 |