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 분 · 배준수

2023년 10월 3주차 주간 기록

주간기록 날짜 2023년 10월 16일 ~ 2023년 10월 22일 계획 책너두 : Real MySQL 8.0 1권 팀 스파르타 Devcamp 심화과정 : NestJS + TypeORM + PosgreSQL GSAT 공부 10월 22일 : GSAT 예비소집 결과 데브캠프 심화교육 회원가입 및 로그인 구현 완료 카카오 로그인 구현 완료 회고 취직했다! 아직 안끝났으니 긴장 풀지말고 조금만 더 힘내자

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

옵티마이저 힌트

책너두 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 분 · 배준수

조인 최적화 알고리즘

책너두 6기 34일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.356 ~ p.369 내용정리 09 옵티마이저와 힌트 9.3 고급 최적화 9.3.1 옵티마이저 스위치 옵션 9.3.1.19 해시 조인(hash_join) 해시 조인은 첫 번째 레코드를 찾는 데는 시간이 많이 걸리지만 최종 레코드를 찾는 데까지는 시간이 많이 걸리지 않는다. 네스티드 루프 조인은 마지막 레코드를 찾는 데까지는 시간이 많이 걸리지만 첫 번째 레코드를 찾는 것은 상대적으로 훨씬 빠르다. 따라서 해시 조인 쿼리는 최고 스루풋(Best Throughput)에 적합하고 네스티드 루프 조인은 최고 응답 속도(Best Response-time)에 적합하다. 일반적인 웹 서비스는 온라인 트랜잭션(OLTP)서비스이기 때문에 스루풋도 중요하지만 응답 속도가 더 중요하다. 반면 분석과 같은 서비스는 전체적으로 처리 소요 시간이 더 중요하다. ...

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

세미 조인과 관련된 최적화들

책너두 6기 33일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.344 ~ p.355 내용정리 09 옵티마이저와 힌트 9.3 고급 최적화 9.3.1 옵티마이저 스위치 옵션 9.3.1.13 구체화(Materialization) 세미 조인에 사용된 서브쿼리를 통째로 구체화해서 쿼리를 최적화한다는 의미. 내부 임시 테이블을 생성한다는 의미이다. 제한 사항과 특성 IN에서 서브쿼리는 상관 서브쿼리(Correlated subquery)가 아니어야 한다. 서브쿼리는 GROUP BY나 집합 함수들이 사용돼도 구체화를 사용할 수 있다. 구체화가 사용된 겨웅에는 내부 임시 테이블이 사용된다. 9.3.1.14 중복 제거(Duplicated Weed-out) 세미 조인 서브쿼리를 일반적인 INNER JOIN 쿼리로 바꿔서 실행하고 마지막에 중복된 레코드를 제거하는 방법으로 처리되는 최적화 알고리즘 ...

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

세미 조인 최적화

책너두 6기 32일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.329 ~ p.343 내용정리 09 옵티마이저와 힌트 9.3 고급 최적화 9.3.1 옵티마이저 스위치 옵션 9.3.1.5 인덱스 머지(index_merge) 인덱스를 이용해 쿼리를 실행할 경우 테이블별로 하나의 인덱스만 사용하지 않고 2개 이상의 인덱스를 이용해 쿼리를 처리하는 옵션 9.3.1.6 인덱스 머지 -교집합(index_merge_intersection) 쿼리가 2개의 where 조건을 가질 때 각각의 인덱스 키를 모두 사용하여 쿼리를 처리하는 것. 결과를 교집합만 반환한다. 9.3.1.7 인덱스 머지-합집합(index_merge_union) 교집합과 달리 OR 연산자를 사용하는 것. 합집합을 반환한다. 우선순위 큐를 이용하여 중복된 레코드들을 정렬 없이 걸러낸다. ...

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