PHP & MySQL

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

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

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 요즘
36개(1/2페이지)
PHP & MySQL
번호 제목 글쓴이 조회 날짜
36 [PHP] 소녀나라 구인공고 사진 관리자 389 2018.04.17 12:54
35 [MYSQL] 게시판 페이징(?) 속도 향상 [1] 관리자 7119 2014.08.13 02:18
34 [MYSQL] 페이징 쿼리, 페이징 기법 관리자 13399 2014.08.13 01:48
33 [MYSQL] 이메일 필터 정규식 관리자 4703 2014.07.25 11:32
32 [PHP] Zen HTML Selectors 관리자 3694 2014.03.12 17:16
31 [PHP] zen coding~! 젠코딩 Zen HTML Elements 관리자 4404 2014.03.12 17:16
30 [PHP] 에디트 플러스 zen coding CSS 관리자 4520 2014.03.12 17:16
29 [PHP] php + jquery ajax + json 관리자 3640 2014.03.04 15:30
28 [PHP] php 엑셀 파일 생성시 한글깨짐 관리자 5479 2014.02.21 16:31
27 [PHP] 날씨 API, 기상청 날씨 파싱 관리자 6727 2014.01.22 15:32
26 [PHP] 도로명주소 관리자 3599 2014.01.09 11:39
25 [MYSQL] MYSQL EXPLAIN 관리자 3444 2013.10.28 12:10
24 [PHP] PHP, AJAX, JSON 리턴 관리자 5052 2013.10.18 17:49
23 [MYSQL] mysql성능 향상 첨부파일 관리자 2579 2013.10.07 12:52
22 [MYSQL] mysql 최적화 관리자 2639 2013.10.07 12:35
21 [PHP] PHP 변수 초기화 및 조건부 할당 관리자 3987 2013.09.25 00:57
20 [PHP] 킴스큐 썸네일 사이즈 변경 관리자 2901 2013.07.16 14:14
19 [PHP] 간단하게 만드는 캐싱 사진 관리자 3322 2013.05.21 14:11
>> [MYSQL] semi join으로 인한 비효율을 제거. 관리자 3386 2013.05.15 12:14
17 [PHP] 웹문서 긁어와서 저장 관리자 3974 2013.05.10 12:37
많이 본 글
댓글 많은 글