PHP & MySQL

semi join으로 인한 비효율을 제거.

관리자 | 2013.05.15 12:14 | 조회 6438

MySQL 5.5 버전까지는 Semi Join(‘세미 조인’ 또는 ‘부분 조인’이라고 부름)의 성능이 최적화되어 있지 않았다

 

예를 들어 다음과 같은 경우다.

SELECT * FROM Country
WHERE
Continent = 'Europe' AND
Country.Code IN (SELECT City.country
FROM City
WHERE City.Population > 1*1000*1000);

서브쿼리 실행 후 WHERE 조건을 수행하는 것이 아니라 매번 데이터를 Nested Loop Join 탐색하면서 서브쿼리를 수행하기 때문에 불필요한 부하가 발생한다

 

오라클에 익숙한 사용자라면 IN 구문 안의 SELECT를 먼저 수행한 후 결과값을 해시 형식으로 만들어서 데이터를 처리한다고 예상할 것이다. 그러나 아쉽게도 MySQL에서는 Country 테이블의 Continent가 Europe인 조건 을 먼저 검색하고, 그 결과를 IN 조건의 서브쿼리를 일일이 반복 수행하며 최종 데이터를 가져온다.

 

 

SELECT Country.*
FROM Country
INNER JOIN City ON Country.Code = City.country
WHERE
Country.Continent = 'Europe'
AND City.Population > 1*1000*1000;


위와 같이 IN 내부에 있는 서브쿼리를 외부로 조인 형태로 변환하면 Semi Join에서처럼 반복적으로 City 테이블에 접근하여 데이터를 처리하지 않는다.

 

출처 : 한빛미디어 mysql performance 중 일부내용

 

 

twitter facebook me2day 요즘
38개(2/2페이지)
PHP & MySQL
번호 제목 글쓴이 조회 날짜
>> [MYSQL] semi join으로 인한 비효율을 제거. 관리자 6439 2013.05.15 12:14
17 [PHP] 웹문서 긁어와서 저장 관리자 7631 2013.05.10 12:37
16 [MYSQL] MYSQL DB튜닝 관리자 6287 2013.04.05 10:15
15 [MYSQL] 자주쓰는 MYSQL 관리자 5054 2013.04.05 10:14
14 [PHP] 팝업방지 BHO 사진 관리자 9838 2013.02.28 14:54
13 [PHP] 강제로 파일다운로드 되게 관리자 9693 2013.01.21 16:31
12 [MYSQL] DB생성+ 계정 셋팅 관리자 3820 2013.01.21 15:15
11 [PHP] 리눅스 서버관리 관리자 4366 2013.01.21 15:14
10 [PHP] SI, SM, ERP, EIP, EAI, CMMS, CRM, SCM, GW, KMS 관리자 9016 2013.01.21 15:13
9 [PHP] eclipse 3.7 pdt php 셋팅방법 첨부파일 관리자 6518 2013.01.21 15:12
8 [PHP] PHP 개발 보안가이드 첨부파일 관리자 7454 2013.01.21 15:10
7 [PHP] 파일 업로드 구현. 쓰기, 수정 관리자 4407 2013.01.21 15:09
6 [PHP] 엑셀다운, 숫자를 문자로 인식 관리자 9455 2013.01.21 15:09
5 [MYSQL] union order by 관리자 3994 2013.01.21 14:24
4 [PHP] 네이버 지도 api 관리자 5248 2013.01.21 14:22
3 [PHP] 특정 날짜 계산 관리자 4460 2013.01.21 14:21
2 [PHP] 한글 잘림 없이 substr처리 관리자 5178 2013.01.21 14:20
1 [PHP] checkbox 배열 값 넘기기 관리자 12974 2013.01.21 14:18
많이 본 글
댓글 많은 글