일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- mysql #numa #swap #memory
- 알고리즘
- 프로그래머스
- No Rules Rules
- leetcode
- 그거봤어?
- list of list
- Dynamic Programmin
- Envoy
- 와썹맨
- LongestPalindromicSubstring
- 기술적 채무
- minimum path sum
- 독후감
- BFS
- 파이썬
- 김태강
- Python
- Unique Paths
- 삼성역량테스트
- 블린이
- 삼성인 아마조니언 되다
- 리스트의 리스트
- 트리
- 나는 아마존에서 미래를 다녔다
- technical debt
- 동적 프로그래밍
- 리트코드
- 규칙없음
- 아마조니언
- Today
- Total
개발자가 되고 싶은 준개발자
mysql 쿼리 튜닝 기본 본문
#디스크 접근 방식
Sequential Access
mySQL은 디스크에 저장된 데이터에 접근할 때 페이지 단위로 접근한다. 페이지는 데이터를 검색하는 최소 단위이다. 물리적으로 인접한 페이지를 순차적으로 읽는 방식으로 보통 테이블 풀 스캔에 사용된다. 데이터를 찾고자 이동하는 디스크 헤더의 움직임을 최소화하여 작업 시간과 리소스 점유 비용을 줄일 수 있다.
Randon Access
물리적으로 떨어진 페이지들에 임의로 접근하는 방식으로 페이지가 위치한 물리적인 위치를 고려하지 않고 접근한다. 디스크 헤더가 정해진 순서 없이 이동하므로 디스크의 물리적인 움직임이 많아 오래 걸린다.
# 오브젝트 스캔 유형
테이블 풀 스캔
인덱스를 거치지 않고 테이블을 처음부터 끝까지 훑어보는 스캔 방식이다. 테이블 풀 스캔은 인덱스가 없이 바로 디스크에 위치한 테이블 데이터에 접근하는 유일한 스캔 방식이다.
인덱스 풀 스캔
인덱스를 처음부터 끝까지 수행하는 방식으로 테이블에 접근하지 않고, 인덱스로 구성된 열 정보만 요구하는 SQL 문에서 인덱스 풀 스캔이 수행된다.
테이블 풀 스캔에 비해 스캔하는 양이 적으나 인덱스를 모두 스캔하므로 검색 범위를 최대한 줄이는 방향으로 튜닝이 필요하다.
인덱스 Range 스캔
SQL 문에서 BETWEEN ~ AND 구문이나 >, <, lIKE 구문 들의 비교 연산 구문이 있을때 사용된다.
Index seek + index scan + 데이터 읽기 과정으로 이루어진다.
1. index seek: 인덱스에서 조건을 만족하는 값이 저장된 위치를 찾음.(레코드의 시작 지점 찾기)
2. index scan: 탐색된 위치부터 필요한 만큼 leaf node의 인덱스를 차례대로 쭉 읽음.
3. 인덱스의 leaf node에서 검색 조건에 일치하는 건들은 데이터 파일에서 레코드를 읽어옴. Leaf node에 저장된 레코드 주소로 데이터 파일의 레코드를 읽어오는데, 레코드 한 건 한 건 단위로 디스크 랜덤 I/O가 발생함. =>비용이 많이 드는 작업.
인덱스 unique scan
primary 키나 고유 인덱스로 테이블에 접근하는 방식으로, WHERE 절에 =조건으로 작성한다. WHERE절의 조건이 primary key나 unique index의 선두 열로 설정되었을 때 사용된다.
인덱스 loose scan
듬성듬성하게 인덱스를 읽는 것으로 인덱스 range 스캔과 비슷하지만 중간에 필요치 않은 인덱스 키 값은 무시하고 다음으로 넘어가는 형태로 처리한다.
인덱스 merge scan
테이블 내에 생성된 인덱스들을 통합해서 스캔하는 방식이다. WHERE 문 조건절의 열들이 서로 다른 인덱스로 존재하면 옵티마이저가 해당하는 인덱스를 가져와서 모두 사용한다. merge하는 방식에는 union과 intersection 방식이 있다. 개별 인덱스를 각각 수행해야 하므로 인덱스에 접근하는 시간이 더 오래 걸린다.
참고 서적)
http://www.yes24.com/Product/Goods/102382080
업무에 바로 쓰는 SQL 튜닝 - YES24
SQL 튜닝의 기본 원리와 사례로 배우는 상황별 튜닝 방법 SQL 튜닝은 수많은 데이터를 더 빠르고 강력하게 처리하도록 해주는 가장 중요한 기술이다. 하지만 쉽지 않은 내용 때문에 부담감을 갖고
www.yes24.com
'MySQL > mysql' 카테고리의 다른 글
[MySQL] PK, unique key 컬럼 선정 방법 (aka. 복제 지연 예방 방법) (0) | 2023.07.17 |
---|---|
[MySQL] Delete 쿼리 하나로 수십시간의 복제 지연 발생 원인 분석 (0) | 2023.05.04 |
[MySQL] swap 사용률 낮추기 위해 NUMA 정책 interleave로 바꾸기 (0) | 2023.02.23 |
MySQL 데이터베이스 이관 시 고려할 점 (0) | 2023.01.31 |
[mysql] DDL 지연 현상 해결 방법 (0) | 2023.01.03 |