MySQL
-
Real MySQL [6-4] 실행계획 - possible_keys, key, key_len, ref, rows, extra 칼럼MySQL 2016. 12. 8. 23:46
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 이전 포스팅 ( Real MySQL [3] 실행계획 - type 칼럼 ) 에서 계속... possible_keys 옵티마이저는 쿼리를 처리하기위해 여러가지 처리 방법을 고려해 비용이 가장 낮을 것으로 예상되는 실행 계획을 선택해 쿼리를 실행한다. possible_keys 칼럼에 내용은 옵티마이저가 최적의 실행계획을 만들기 위해 후보로 선정했던 인덱스 목록이다. 이 컬럼은 무시해도 좋다. key Key 칼럼에 표시되는 인덱스는 최종 선택되어 실행 계획에 사용된 인덱스를 의미한다. 쿼리 튜닝시 Key 칼럼에 의도했던 인덱스가 표시되는지 확..
-
Real MySQL [6-3] 실행계획 - type 칼럼MySQL 2016. 12. 8. 22:40
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 이전 포스팅 ( Real MySQL [2] 실행계획 - table, type 칼럼 ) 에서 계속... fulltext fulltext는 MySQL 전문 검색(Fulltext) 인덱스를 사용해 레코드를 읽는 접근 방법을 의미한다. 전문 검색 인덱스는 통계 정보가 관리되지 않으며, 전혀 다른 SQL을 사용해야 한다. 그래서 MySQL 옵티마이저는 전문 인덱스를 사용할수 있는 SQL에서는 쿼리의 비용과는 관계없이 거의 매번 fulltext 접근 방법을 사용한다. MySQL 전문 검색 조건은 우선순위가 상당히 높다. 전문 검색은 "MATCH ..
-
Real MySQL [6-2] 실행계획 - table, type 칼럼MySQL 2016. 12. 8. 21:37
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 이전 포스팅 ( Real MySQL [1] 실행계획 - id, select_type 칼럼) 에서 계속... table 칼럼 MySQL의 실행 계획은 단위 SELECT 쿼리 기준이 아니라 테이블 기준으로 표시된다. 아래와 같이 별도의 테이블을 사용하지 않는 SELECT 쿼리의 경우에는 table 이 null로 표시된다. EXPLAIN SELECT NOW(); EXPLAIN SELECT NOW() FROM DUAL; 일부 DBMS에서는 SELECT문장이 반드시 FROM 절을 가져야 하는 제약이 있어 이를 위해 'DUAL'이라는 스칼라(칼럼..
-
MySQL IN 구문 사용법MySQL 2016. 12. 8. 00:30
WHERE 절에서 IN 구문에 대한 사용법을 알아보자. 1) WHERE 일치하기 원하는 컬럼명 IN (조건1, 조건2, 조건3 ...) - WHERE 뒤에 써준 컬럼과 IN 뒤로 나열한 조건들 중 일치하는 row를 가져오게 된다. 여기서 나열한 조건들은 OR 조건으로 검색하게 된다. 2) WHERE 일치하지 않길 원하는 컬럼명 NOT IN (조건1, 조건2, 조건3, ...) - 일치하지 않길 원하는 컬럼명을 뒤에 NOT IN 을 기재하고 조건을 입력하면 조건을 제외한 내용을 가져오게 된다. 조건은 OR 조건으로 검색하게 된다. 3) WHERE 일치하기 원하는 컬럼명 IN (조건) - 다중조건이 아닌 하나의 조건만을 조회한다. IN뒤에 SubQuery의 내용을 사용하면 보다 더 다양하게 사용할 수 있다...
-
Real MySQL [6-1] 실행계획 - id, select_type 칼럼MySQL 2016. 12. 6. 23:44
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 쿼리 실행 절차 (263p) 1) 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리한다. 2) SQL의 파싱 정보(파스 트리)를 확인하면서 어떤 테이블로부터 읽고 어떤 인덱스를 통해 테이블을 읽을지 선택한다. 3) 두 번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로부터 데이터를 가져온다. 첫 번째 단계를 SQL 파싱 이라고 하며, MySQL 서버의 "SQL 파서" 라는 모듈로 처리한다. SQL 문장이 문법적으로 잘못된 경우 이 단계에서 걸러진다. 또한 이 ..
-
MySQL UnionMySQL 2016. 12. 5. 20:21
MySQL - UNION MySQL 과 같은 RDBMS에서 사용하는 Union 연산자는 여러 테이블에 존재하는 같은 성격의 값을 한번의 쿼리로 추출할 수 있도록 돕는다. Member 테이블에 회원 이메일이 있고, Newsletter 테이블에 구독자 이메일이 있는데, 모든 이메일로 메일을 보내고자 할 경우 두 번의 쿼리와 병합 프로그램을 만들어야 할 것이다. 이럴 때 union 연산자를 사용해 한번의 쿼리로 간단하게 정보를 추출할 수 있다. Union을 사용할 때 주의할 점 - 대응하는 필드의 이름이 같아야 한다. 같지 않다면 AS를 사용하여 같게 만든다. - 대응되는 각 필드의 타입이 같아야 한다. 예제 테이블 정보 위의 두 테이블에서 이메일을 추출해야 할 경우 union을 사용하면 간단하다. 중복되지 ..