일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 부트캠프
- 오픈챌린지
- 국비지원취업
- 오블완
- 백엔드 부트캠프
- 국비지원교육
- KDT
- 디자인강의
- UXUI챌린지
- 내일배움캠프
- 백엔드개발자
- 백엔드
- mysql
- Spring
- 티스토리챌린지
- 환급챌린지
- 오픈패스
- UXUIPrimary
- 디자인챌린지
- 패스트캠퍼스
- OPENPATH
- Be
- 백준
- 디자인교육
- 국비지원
- UXUI기초정복
- 객체지향
- baekjoon
- Java
- 내일배움카드
- Today
- Total
목록학습일지/데이터베이스 (19)
군만두의 IT 공부 일지
목차 10.3 실행 계획 분석MySQL 8.0 버전부터는 EXPLAIN 명령의 결과로 출력되는 실행 계획의 포맷을 기존 테이블 포맷과 JSON, TREE 형태로 선택할 수 있음.실행 계획의 출력 포맷보다는 실행 계획이 어떤 접근 방법을 사용해서 어떤 최적화를 수행하는지, 그리고 어떤 인덱스를 사용하는지 등을 이해하는 것이 더 중요함.아무런 옵션 없이 EXPLAIN 명령을 실행하면, 쿼리 문장의 특성에 따라 표 형태로 된 1줄 이상의 결과가 표시됨.표의 각 라인(레코드)은 쿼리 문장에서 사용된 테이블(서브쿼리로 임시 테이블을 생성한 경우 그 임시 테이블까지 포함)의 개수만큼 출력됨.실행 순서는 위에서 아래로 표시됨(UNION이나 상관 서브쿼리와 같은 경우 순서대로 표시되지 않을 수도 있음).출력된 실행 계..
목차10. 실행 계획10.1 통계 정보MySQL 서버는 5.7 버전까지 테이블과 인덱스에 대한 개괄적인 정보를 가지고 실행 계획을 수립함.하지만 테이블 칼럼의 값들이 어떻게 분포되어 있는지에 대한 정보가 없기 때문에, 실행 계획의 정확도가 떨어지는 경우가 많았음.MySQL 8.0 버전부터는 인덱스되지 않은 칼럼들에 대해서도 데이터 분포도를 수집해서 저장하는 히스토그램(Histogram) 정보가 도입됨. 히스토그램이 도입됐다고 해서 기존의 테이블이나 인덱스의 통계 정보가 필요치 않은 것은 아님.10.1.1 테이블 및 인덱스 통계 정보비용 기반 최적화에서 가장 중요한 것은 통계 정보임.통계 정보가 정확하지 않다면 엉뚱한 방향으로 쿼리를 실행할 수 있기 때문임. 부정확한 통계 정보 탓에 0.1초에 끝날 쿼리에..
목차9.4 쿼리 힌트MySQL 서버가 서비스의 비지니스를 완벽히 이해하지 못하므로, 서비스 개발자나 DBA가 옵티마이저에게 부족한 실행 계획을 어떻게 수립하는지 알려주기 위한 목적으로 MySQL에서는 힌트를 제공함.MySQL 서버에서 사용 가능한 쿼리 힌트는 다음과 같이 2가지로 구분할 수 있음.인덱스 힌트: 예전 버전의 MySQL에서 사용된 힌트옵티마이저 힌트: MySQL 5.6 버전부터 추가된 힌트이 책에서는 옵티마이저 힌트가 아닌 것은 인덱스 힌트 절로 분류함.9.4.1 인덱스 힌트STRAIGHT_JOIN과 USE INDEX 등을 포함한 인덱스 힌트는 MySQL 서버에 옵티마이저 힌트가 도입되기 전 사용된 기능으로, SQL 문법에 맞게 사용해야 하기 때문에 ANSI-SQL 표준을 준수하지 못함.My..
목차9.3 고급 최적화옵티마이저 옵션은 조인 관련된 옵티마이저 옵션과 옵티마이저 스위치로 구분할 수 있음.9.3.1 옵티마이저 스위치 옵션옵티마이저 스위치 옵션은 optimizer_switch 시스템 변수를 이용해서 제어함.optimizer_switch 시스템 변수에는 여러 개의 옵션을 세트로 묶어서 설정하는 방식으로 사용함.옵티마이저 스위치 이름기본값설명batched_key_accessoffBKA 조인 알고리즘을 사용할지 여부 설정block_nested_looponBlock Nested Loop 조인 알고리즘을 사용할지 여부 설정engine_condition_pushdownonEngine Condition Pushdown 기능을 사용할지 여부 설정index_condition_pushdownonIndex..
목차9.2 기본 데이터 처리9.2.4 GROUP BY 처리GROUP BY 또한 ORDER BY와 같이 쿼리가 스트리밍된 처리를 할 수 없게 하는 처리 중 하나임.GROUP BY 절이 있는 쿼리에서는 HAVING 절을 사용할 수 있는데, HAVING 절은 GROUP BY 결과에 대해 필터링 역할을 수행함.GROUP BY 작업은 인덱스를 사용하는 경우와 그렇지 못한 경우로 나뉨.인덱스를 사용할 때인덱스를 차례대로 읽는 인덱스 스캔 방법인덱스를 건너뛰면서 읽는 루스 인덱스 스캔 방법인덱스를 사용하지 못할 때임시 테이블 사용9.2.4.1 인덱스 스캔을 이용하는 GROUP BY(타이트 인덱스 스캔)조인의 드라이빙 테이블에 속한 칼럼만 이용해 그루핑할 때, GROUP BY 칼럼으로 이미 인덱스가 있다면 그 인덱스를..
목차9.1 개요9.1.1 쿼리 실행 절차MySQL 서버에서 쿼리가 실행되는 과정(3단계)사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리(파스 트리)함.이 단계를 SQL 파싱(Parsing)이라고 함.MySQL 서버의 SQL 파서라는 모듈로 처리함.SQL 문장이 문법적으로 잘못됐다면 걸러짐.SQL 파스 트리가 만들어짐.MySQL 서버는 SQL 문장 그 자체가 아니라 SQL 파스 트리를 이용해 쿼리를 실행함. SQL의 파싱 정보(파스 트리)를 확인하면서 어떤 테이블로부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택함.SQL 파스 트리를 참조하면서 다음 내용을 처리함.불필요한 조건 제거 및 복잡한 연산의 단순화여러 테이블의 조인이 있는 경우 어떤 순서로 테이블..
목차8.4 R-Tree 인덱스8.4.1 구조 및 특성도형들의 MBR(Minimum Bounding Rectangle, 해당 도형을 감싸는 최소 크기의 사각형)에서 사각형들의 포함 관계를 B-Tree 형태로 구현한 인덱스8.4.2 B-Tree 인덱스의 용도WG884(GPS) 기준의 위도, 경도 좌표 저장에 주로 사용됨.CAD/CAM 소프트웨어 또는 회로 디자인 등과 같이 좌표 시스템에 기반을 둔 정보에 대해 적용할 수 있음.8.5 전문 검색 인덱스문서의 내용 전체를 인덱스화해서 특정 키워드가 포함된 문서를 검색하는 전문 검색에는 InnoDB나 MyISAM 스토리지 엔진에서 제공하는 B-Tree 인덱스를 사용할 수 없음.문서 전체에 대한 분석과 검색을 위한 인덱싱 알고리즘을 전문 검색(Full Text se..
목차 8.3 B-Tree 인덱스 개요B-Tree 인덱스는 가장 기본적인 인덱스 구조로, 데이터가 균형적으로 유지되어 효율적인 검색이 가능함.B-Tree의 B는 Binary(이진)이 아닌 Balanced(균형)을 의미하며, DBMS에서는 주로 B+-Tree와 B*-Tree 변형을 사용함.B-Tree 인덱스는 주로 이진 트리 구조를 기반으로 하지만, 데이터의 처리와 저장 방식에 따라 다양한 구조를 사용함.데이터는 항상 정렬된 상태로 저장되어 검색 효율을 극대화함.8.3.1 B-Tree 인덱스의 구조 및 특성 B-Tree의 기본 구조는 루트 노드, 브랜치 노드, 리프 노드로 구성되며, 루트에서 리프 노드로 내려가며 데이터를 찾음.인덱스의 리프 노드는 항상 데이터 파일에 저장된 레코드의 주소를 가지고 있음.My..