real mysql
-
Real MySQL [7-21] 쿼리 작성 및 최적화MySQL 2017. 4. 4. 22:00
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. - 포스팅에 포함된 Query 결과는 AWS EC2 FreeTier(CentOS7.2) 환경에 MySQL v5.7.17 에서 실행한 결과를 포함하였습니다. 실행환경에 따라 Query 실행시간이나 RDBMS 실행계획이 다를 수 있습니다. - 샘플 코드 dump 파일 적용안내 : http://cafe.naver.com/realmysql - 샘플 코드 dump 파일 경로 : http://github.com/wikibook/realmysql/archive/master.zip LOCK IN SHARE MODE와 FOR UPDATE InnoDB ..
-
Real MySQL [7-20] 쿼리 작성 및 최적화 - 집합연산MySQL 2017. 4. 1. 21:28
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. - 포스팅에 포함된 Query 결과는 AWS EC2 FreeTier(CentOS7.2) 환경에 MySQL v5.7.17 에서 실행한 결과를 포함하였습니다. 실행환경에 따라 Query 실행시간이나 RDBMS 실행계획이 다를 수 있습니다. - 샘플 코드 dump 파일 적용안내 : http://cafe.naver.com/realmysql - 샘플 코드 dump 파일 경로 : http://github.com/wikibook/realmysql/archive/master.zip 집합연산 조인이 테이블의 칼럼을 연결하는 것이라면 집합 연산은 여러 ..
-
Real MySQL [7-19] 쿼리 작성 및 최적화 - 서브쿼리 (2)MySQL 2017. 3. 31. 20:28
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. - 포스팅에 포함된 Query 결과는 AWS EC2 FreeTier(CentOS7.2) 환경에 MySQL v5.7.17 에서 실행한 결과를 포함하였습니다. 실행환경에 따라 Query 실행시간이나 RDBMS 실행계획이 다를 수 있습니다. - 샘플 코드 dump 파일 적용안내 : http://cafe.naver.com/realmysql - 샘플 코드 dump 파일 경로 : http://github.com/wikibook/realmysql/archive/master.zip SELECT 절에 사용된 서브 쿼리 SELECT 절에 사용된 서브 쿼..
-
Real MySQL [7-18] 쿼리 작성 및 최적화 - 서브쿼리MySQL 2017. 3. 28. 21:10
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 서브 쿼리 서브 쿼리를 사용하면 단위 처리별로 쿼리를 독립시킬 수 있다. 조인처럼 여러 테이블을 섞어두는 형태가 아니라서 쿼리의 가독성도 높아지고, 복잡한 쿼리도 손쉽게 작성할 수 있다. 하지만 MySQL 서버는 서브 쿼리를 최적으로 실행하지 못할 때가 많다. 가장 대표적으로 FROM 절에 사용되는 서브 쿼리나 WHERE 절의 IN (subquery) 구문은 가장 최신 버전 에서도 그다지 효율적이지 않다. 서브 쿼리는 외부 쿼리에서 정의된 칼럼을 참조하는지 여부에 따라 상관 서브 쿼리와 독립 서브 쿼리로 나눌 수 있다. 상관 서브 쿼리..
-
Real MySQL [7-17] 쿼리 작성 및 최적화 - ORDER BYMySQL 2017. 3. 27. 20:56
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. ORDER BY ORDER BY 절이 사용되지 않는 SELECT 쿼리의 결과의 정렬순서는 다음과 같다. - 인덱스를 사용한 SELECT의 경우에는 인덱스의 정렬된 순서대로 레코드를 가져온다. - 인덱스를 사용하지 못하고 풀 테이블 스캔을 실행하는 SELECT의 경우, MyISAM은 테이블 저장된 순서대로 가져오는데, 순서가 INSERT 순서를 이믜하는 것은 아니다. 레코드가 삭제되면서 빈 공간이 생기면 INSERT 되는 레코드는 항상 테이블의 마지막이 아니라 빈 공간 이있으면 빈 공간에 저장되기 때문이다. InnoDB의 경우 항상 프라..
-
Real MySQL [7-14] 쿼리 작성 및 최적화 - Delayed JoinMySQL 2017. 2. 22. 21:46
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 지연된 조인(Delayed Join) 조인을 사용하는 쿼리에서 GROUP BY 또는 ORDER BY를 사용할 때 인덱스를 사용한다면 이미 최적으로 처리되고 있을 가능성이 높다. 하지만 그러지 못하다면 MySQL 서버는 우선 모든 조인을 실행하고 난 다음 GROUP BY나 ORDER BY를 처리할 것이다. 조인은 대체적으로 실행되면 될수록 결과 레코드 건수가 늘어난다. 그래서 조인의 결과를 GROUP BY 하거나 ORDER BY 하면 조인을 실행하기 전의 레코드를 GROUP BY나 ORDER BY를 수행하는 것보다 많은 레코드를 처리해야..
-
Real MySQL [7-13] 쿼리 작성 및 최적화MySQL 2017. 2. 17. 23:27
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. INNNER JOIN과 OUTER JOIN의 선택 INNER JOIN은 조인의 양쪽 테이블 모두 레코드가 존재하는 경우에만 레코드가 반환된다. 하지만 OUTER JOIN은 아우터 테이블에 존재하면 레코드가 반환된다. 쿼리나 테이블의 구조를 살펴보면 OUTER JOIN을 사용하지 않아도 될 것을 OUTER JOIN으로 사용할 때가 상당히 많다. 때로는 OUTER JOIN으로 실행하면 쿼리의 처리가 느려진다고 생각하고, 억지로 INNER JOIN으로 쿼리를 작성하려는 경우도 있다. 사실 OUTER JOIN과 INNER JOIN은 실제 가져..
-
Real MySQL [7-11] 쿼리 작성 및 최적화 - JOINMySQL 2017. 2. 14. 20:20
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 이번 포스팅에서는 JOIN이 어떻게 인덱스를 사용하는지에 대해 각 쿼리 패턴별로 자세히 살펴보자. JOIN의 순서와 인덱스 인덱스 레인지 스캔으로 레코드를 읽는 순서를 정리해보자 1) 인덱스에서 조건을 만족하는 값이 저장된 위치를 찾는다. 이 과정을 인덱스 탐색(Index seek)이라고 한다. 2) 1번에서 탐색된 위치부터 필요한 만큼 인덱스를 죽 읽는다. 이 과정을 인덱스 스캔(Index scan)이라고 한다. 3) 2번에서 읽어들인 인덱스 키와 레코드 주소를 이용해 레코드가 저장된 페이지를 가져오고, 최종 레코드를 읽어온다. 인덱..