목차 1. 테이블 및 인덱스 통계 정보 2. 히스토그램 3. 코스트 모델 MySQL 8.0 버전부터 인덱스되지 않은 컬럼들에 대해서도 데이터 분포도를 수집해서 저장하는 히스토그램 정보가 도입됐다. 쿼리를 처리하는데 필요한 세부 작업들의 비용은 코스트 모델로 관리하고 옵티마이저는 테이블 및 인덱스의 통계 정보와 히스토그램을 통해 쿼리 전체의 비용을 계산하고 실행 계획을 수립한다. 1. 테이블 및 인덱스 통계 정보 비용 기반 최적화에서 가장 중요한 것은 통계 정보이다. (규칙 기반 최적화 vs 비용 기반 최적화) 더보기 규칙 기반 최적화(RBO)는 기본적으로 대상 테이블의 레코드 건수나 선택도 등을 고려하지 않고 옵티마이저에 내장된 우선순위에 따라 실행 계획을 수립하는 방식이다. 통계 정보를 조사하지 않고 ..
목차 1. 랜덤 I/O와 순차 I/O 디스크 읽기 2. 인덱스 1. 랜덤 I/O와 순차 I/O 디스크 읽기 랜덤 I/O는 하드 디스크 드라이브의 플래터를 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미한다. 3개의 페이지를 디스크에 기록하기 위해 순차 I/O는 1번의 시스템 콜로 디스크의 헤더를 1번 움직이고, 랜덤 I/O는 3번의 시스템 콜로 디스크 헤드를 3번 움직인다. 디스크의 성능은 디스크 헤더의 위치 이동없이 얼마나 많은 데이터를 한 번에 기록하느냐에 의해 결정되기 때문에 랜덤 I/O 작업이 부하가 훨씬 크다. 테이블의 레코드 대부분을 읽는 작업에서는 인덱스 레인지 스캔(랜덤 I/O)이 아닌 풀 테이블 스캔(순차 I/O)을 사용하도록 유도할 수 있지..
목차 1. B-Tree 인덱스를 통한 데이터 읽기 2. B-Tree 인덱스의 정렬 및 스캔 방향 3. B-Tree 인덱스의 가용성과 효율성 어떤 경우에 인덱스를 사용하게 유도할지, 또는 사용하지 못하게 할지 판단하려면 MySQL이 어떻게 인덱스를 이용해서 실제 레코드를 읽어 내는지 알아야 한다. MySQL이 인덱스를 이용하는 방법들과 인덱스의 정렬, 가용성에 대해 알아본다. 1. B-Tree 인덱스를 통한 데이터 읽기 1) 인덱스 레인지 스캔 인덱스 레인지 스캔은 검색해야 할 인덱스의 범위가 결정됐을 때 사용하는 방식이다. SELECT * FROM employees WHERE first_name BETWEEN 'Ebbe' AND 'Gad'; (1) 인덱스 레인지 스캔 루트 노드 → 브랜치 노드 → 리프 ..
- Total
- Today
- Yesterday
- MySQL
- Stream
- 스프링 예외 추상화
- 도메인 모델링
- Spring Boot
- 학습 테스트
- JPA
- 폴링 발행기 패턴
- Git
- mockito
- 마이크로서비스 패턴
- Spring Data JPA
- 스프링 카프카 컨슈머
- H2
- Ubiquitous Language
- kafka
- clean code
- 계층형 아키텍처
- TDD
- spring rest docs
- 이벤트 스토밍
- 트랜잭셔널 아웃박스 패턴
- ATDD
- named query
- 육각형 아키텍처
- http
- HTTP 헤더
- java8
- Spring
- 클린코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |