Extra 칼럼에 표시되는 메시지

책너두 6기 44일차 백은빈, 이성욱의 Real MySQL 8.0 1권 p.458 ~ p.465 내용정리 10 실행계획 10.3 실행계획분석 10.3.12 Extra 칼럼 10.3.12.4 FirstMatch FirstMatch 전략이 사용되면 출력된다. 10.3.12.5 Full scan on NULL key SQL 표준에서는 NULL을 “알 수 없는 값"으로 정의하고 있으며, NULL에 대한 연산의 규칙까지 정의하고 있다. 연산을 수행하기 위해 이 조건은 다음과 같이 비교돼야 한다. 서브쿼리가 1건이라도 결과 레코드를 가진다면 최종 비교 결과는 NULL 서브쿼리가 1건도 결과 레코드를 가지지 않는다면 최종 비교 결과는 FALSE 10.3.12.6 Impossible HAVING 쿼리에 사용된 HAVING 절의 조건을 만족하는 레코드가 없을 때 실행 계획의 Extra칼럼에는 “Impossible HAVING” 키워드가 표시된다. ...

2023년 10월 31일 · 2 분 · 배준수

처리 방법을 나타내는 칼럼들

책너두 6기 43일차 백은빈, 이성욱의 Real MySQL 8.0 1권 p.449 ~ p.457 내용정리 10 실행계획 10.3 실행계획분석 10.3.6 possible_keys 칼럼 MySQL 옵티마이저는 쿼리를 처리하기 위해 여러 가지 처리 방법을 고려하고 그중에서 비용이 가장 낮을 것으로 예상하는 실행 계획을 선택해 쿼리를 실행한다. 그런데 possible_keys 칼럼에 있는 내용은 옵티마이저가 최적의 실행 계획을 만들기 위해 후보로 선정했던 접근 방법에서 사용되는 인덱스의 목록일 뿐이다. 즉, 말 그대로 “사용될 법했던 인덱스의 목록"이다. 10.3.7 key 칼럼 최종 선택된 실행 계획에서 사용하는 인덱스를 의미 ...

2023년 10월 30일 · 2 분 · 배준수

type 칼럼의 접근 방법

책너두 6기 42일차 백은빈, 이성욱의 Real MySQL 8.0 1권 p.442 ~ p.448 내용정리 10 실행계획 10.3 실행계획분석 10.3.5 type 칼럼 10.3.5.6 ref_or_null ref 접근 방법과 같은데, NULL 비교가 추가된 형태 10.3.5.7 unique_subquery WHERE 조건절에서 사용될 수 있는 IN(subquery) 형태의 쿼리를 위한 접근 방법 10.3.5.8 index_subquery IN 연산자의 특성상 IN(subquery) 또는 IN(상수 나열) 형태의 조건은 괄호 안에 있는 값의 목록에서 중복된 값이 먼저 제거된다. unique_subquery는 중복된 값을 만들어내지 않지만, IN(subquery)에서 subquery가 중복된 값을 반환할 때, 인덱스를 이용해서 제거할 수 있으면 이 접근 방법이 사용된다. ...

2023년 10월 28일 · 1 분 · 배준수

type 칼럼

책너두 6기 41일차 백은빈, 이성욱의 Real MySQL 8.0 1권 p.434 ~ p.441 내용정리 10 실행계획 10.3 실행계획분석 10.3.5 type 칼럼 type 이후의 칼럼은 MySQL 서버가 각 테이블의 레코드를 어떤 방식으로 읽었는지를 나타낸다. 인덱스를 사용했는지, 처음부터 풀 테이블 스캔으로 읽었는지 등등.. 따라서 반드시 체크해야할 중요한 정보다. 10.3.5.1 system 레코드가 1건만 존재하는 테이블 또는 한 건도 존재하지 않는 테이블을 참조하는 형태의 접근 방법 10.3.5.2 const 테이블의 레코드 건수와 관계없이 쿼리가 프라이머리 키나 유니크 키 칼럼을 이용하는 WHERE 조건절을 가지고 있으며, 반드시 1건으 ㄹ반환하는 쿼리의 처리 방식 ...

2023년 10월 27일 · 1 분 · 배준수

table, partitions 칼럼

책너두 6기 40일차 백은빈, 이성욱의 Real MySQL 8.0 1권 p.429 ~ p.433 내용정리 10 실행계획 10.3 실행계획분석 10.3.3 table 칼럼 MySQL 서버의 실행 계획은 단위 SELECT쿼리 기준이 아니라 테이블 기준으로 표시된다. “<>” 으로 둘러싸인 이름이 명시되는 테이블은 임시 테이블을 의미한다. 10.3.4 paritions 칼럼 EXPLAIN 명령으로 파티셔 관련 실행 계획까지 모두 확인할 수 있다.

2023년 10월 26일 · 1 분 · 배준수

select_type 칼럼

책너두 6기 39일차 백은빈, 이성욱의 Real MySQL 8.0 1권 p.419 ~ p.428 내용정리 10 실행 계획 10.3 실행 계획 분석 10.3.2 select_type 칼럼 각 단위 SELECT 쿼리가 어떤 타입의 쿼리인지 표시되는 칼럼이다. 다음 값들이 출력된다. 10.3.2.1 SIMPLE UNION이나 서브쿼리를 사용하지 않은 단순한 SELECT쿼리인 경우 출력 10.3.2.2 PRIMARY UNION이나 서브쿼리를 가지는 SELECT 쿼리의 실행 계획에서 가장 바깥쪽(Outer)에 있는 단위 쿼리 10.3.2.3 UNION UNION으로 결합하는 단위 SELECT 쿼리 가운데 첫 번쨰를 제외한 두 번째 이후 단위 SELECT 쿼리 ...

2023년 10월 25일 · 2 분 · 배준수

실행 계획 출력

책너두 6기 38일차 백은빈, 이성욱의 Real MySQL 8.0 1권 p.412 ~ p.418 내용정리 10 실행 계획 10.2 실행 계획 확인 DESC 나 EXPLAIN으로 확인할 수 있다. 10.2.1 실행 계획 출력 포맷 JSON, TREE, 단순 테이블 형태를 선택할 수 있다. 10.2.2 쿼리의 실행 시간 확인 쿼리의 실행 계획과 단계 소요된 시간 정보는 EXPLAIN ANALYZE로 확인할 수 있다. 10.3 실행 계획 분석 출력된 실행 계획의 각 칼럼이 어떤 의미를 갖는지 확인해보자. 표의 각 라인(레코드)은 쿼리 무낮ㅇ에서 사용된 테이블의 개수만큼 출력된다. ...

2023년 10월 24일 · 1 분 · 배준수

실행 계획

책너두 6기 37일차 백은빈, 이성욱의 Real MySQL 8.0 1권 p.393 ~ p.411 내용정리 10 실행계획 많은 데이터를 안전하게 저장 및 관리하고 사용자가 원하는 데이터를 빠르게 조회하는 것이 중요하다. 이를 위해, 옵티마이저가 사용자의 쿼리를 최적으로 처리할 수 있게 하는 쿼리의 실행 계획을 수립할 수 있어야 한다. 실행 계획을 읽고 이해하려면 서버가 데이터를 처리하는 로직을 이해해야 한다. 10.1 통계 정보 테이블과 인덱스에 대한 개괄적인 정보와 인덱스되지 않은 칼럼들에 대해서 데이터 분포도를 수집해서 저장된 히스토그램 정보로 실행 계획을 수립한다. ...

2023년 10월 23일 · 2 분 · 배준수

옵티마이저 힌트

책너두 6기 36일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.382 ~ p.392 내용정리 09 옵티마이저와 힌트 9.4 쿼리 힌트 9.4.2 옵티마이저 힌트 9.4.2.2 MAX_EXCUTION_TIME 유일하게 쿼리의 실행 계획에 영향을 미치지 않는 힌트. 단순히 쿼리의 최대 실행 시간을 설정하는 힌트 9.4.2.3 SET_VAR 시스템 변수를 조정한다. 실행계획을 바꾸거나, 조인 버퍼나 정렬용 버퍼(소트 버퍼)의 크기를 일시적으로 증가시켜 대용량 처리 쿼리의 성능을 향상시키는 용도로 사용. 9.4.2.4 SEMIJOIN & NO_SEMIJOIN 앞에서 살펴본 각 세미 조인의 최적화를 사용할 지 선택은 SEMIJOIN 힌트로 제어할 수 있다. ...

2023년 10월 21일 · 2 분 · 배준수

힌트

책너두 6기 35일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.370 ~ p.381 내용정리 09 옵티마이저와 힌트 9.4 쿼리 힌트 옵티마이저에게 쿼리의 실행 계획을 어떻게 수립해야 할지 알려줄 수 있는 방법. 인덱스 힌트와 옵티마이저 힌트 2가지로 구분한다. 9.4.1 인덱스 힌트 SQL의 문법에 맞게 사용해야 해서 ANSI-SQL 표준 문법을 준수하지 못하는 단점이 있다. 따라서 가급적 옵티마이저 힌트를 쓸 것이 권장된다. 9.4.1.1 STRAIGHT_JOIN 옵티마이저 힌트인 동시에 조인 키워드이기도 하다. SELECT, UPDATE, DELETE쿼리에서 여러 개의 테이블이 조인되는 경우 조인 순서를 고정하는 역할을 한다. ...

2023년 10월 20일 · 2 분 · 배준수