05-16 00:01
Recent Posts
Recent Comments
관리 메뉴

miinsun

[MySQL] MySQL 튜닝 용어 정리 본문

DataBase/MySQL

[MySQL] MySQL 튜닝 용어 정리

miinsun 2023. 1. 14. 22:35

오브젝트 스캔 유형

1. 테이블 스캔

테이블 풀 스캔 : 테이블 스캔은 인덱스를 거치지 않고바로 디스크에 위치한 테이블 데이터에 접근하는 것을 의미한다.

 

2. 인덱스 스캔

인덱스 스캔은 인덱스로 테이블 데이터를 찾아가는 것을 의미한다.

종류로는 인덱스 범위 스캔, 인덱스 풀 스캔, 인덱스 고유 스캔, 인덱스 루스 스캔, 인덱스 병합 스캔 등이 있다.

 

* 인덱스 범위 스캔

인덱스를 범위 기준으로 스캔한 뒤, 스캔 결과를 토대로 데이터를 찾아감

장) 좁은 범위를 스캔 할 때는 성능적으로 매우 효율적인 편이다.

단) 넓은 범위에서는 비효율적일 수 있다.

 

* 인덱스 풀 스캔

데이터를 찾을 때 인덱스를 처음부터 끝까지 수행하는 방식이다. 이때 테이블 풀 스캔과의 차이점은 테이블에 직접 접근하지 않고 인덱스로 구성된 열 정보만 요구하는 SQL 문에서 인덱스 풀 스캔을 진행한다는 점이다.

장) 테이블 풀 스캔보다 성능적으로 우위를 차지한다.

단) 검색 범위를  줄이는 방향으로 SQL 튜닝이 되야한다.

 

* 인덱스 고유 스캔

인덱스 기본 키나 고유 익덱스로 테이블에 접근, 가장 효율적인 스캔 방법이다.

WHERE절에 '=' 조건을 사용해서 작성한다.

 

* 인덱스 루스 스캔

인덱스의 필요한 부분만 골라 스캔하는 방식이다. 인덱스 범위 스캔처럼 넓은 범위에 전부 접근하지 않고, WHERE 조건문 기준으로 불필요한 인덱스는 무시한다.

- 보통 GROUP BY 구문이나 MAX(), MIN() 함수가 포함되면 동작한다.
- 이미 오름차 순으로 정렬 된 인덱스에서 최댓 값, 최솟 값을 찾을 때 사용된다.

 

* 인덱스 병합 스캔

테이블 내에서 생성된 인덱스들을 통합해서 스캔하는 방식, 서로 다른 인덱스들을 '결합'과 '교차'하는 방법이 있다. 이들 방식은 모두 실행 계획으로 출력 됨.

인덱스 병합 스캔은 물리적으로 존재하는 인덱스를 각각 수행하기 때문에 시간이 몇배로 걸림. 따라서 보통 하나의 인덱스로 통합하거나, SQL문이 독립된 인덱스에서 수행하도록 튜닝함

 

3. 디스크 접근 방식

* 시퀀셜 액세스

물리적으로 인접한 페이지를 차례대로 읽는 순차 접근 방식. 보통 테이블 풀 스캔에 활용된다. 디스크 헤더의 움직임을 최소화하여 작업 시간과 리소스 점유 비용을 줄일 수 있음.

 

* 랜덤 액세스

물리적으로 떨어진 페이지에 임의 접근하는 방식이다. 물리적인 위치를 고려하지 않는다. 디스크의 물리적인 이동이 필요하고 다중 페이지 읽기가 불가능해 수행 시간이 오래 걸림

 

4. 조건 유형

SQL은 WHERE절 조건문을 기준으로 데이터가 저장된 디스크에 접근 함.

 

* 액세스 조건

디스크에 있는 데이터에 처음 접근하는 조건으로 SQL튜닝의 핵심이다.

 

* 필터 조건

액세스 조건으로 가져온 데이터를 추가로 불필요한 데이터를 가공하거나 제거하는 과정이다.

 

5. 응용 용어 정리

* 선택도 Selectivity

선택도 = 선택한 데이터 건수 % 전체 데이터 건수
변형된 선택도 = 1 % DISTINCT(COUNT 열명)

테이블의 특정 열을 기준으로 해당 열의 조건절에 따라 선택되는 데이터의 비율

  • 선택도가 높을 때
    • 선택도가 높다 => 해당 열에 중복되는 데이터가 많다 => 대량의 데이터 출력
  • 선택도가 낮을 때
    • 선택도가 낮다 => 대량의 데이터 중 원 하는 데이터를 고를 수 있다 => 인덱스열을 생성할 때, 주요 고려 대상이 된다.

 

* 카디널리티 Cardinality

하나의 데이터 유형으로 정의되는 데이터 행의 개수, 현업에서는 중복 수치를 나타내는 지표

중복도가 높으면 카디널리티가 낮고, 중복도가 낮으면 카디널리티가 높다

카디널리티 = 전체 데이터 건수 X 선택도

ex) 주민등록 번호 = 카디널리티 높음, 이름 = 카디널리티 중간, 성별 = 카디널리티 낮음

 

* 힌트 Hint

데이터베이스에 힌트를 전달해 데이터를 빨리 찾을 수 있도록 돕는다.

SELECT 학번, 전공 코드
FROM 학생 /*! USE INDEX(학생_IDX01) */
WHERE 이름 = '윤민선';

-! 명시적으로 힌트를 작성해도 옵티마이저가 비효율적이라고 판단하면 무시 될 수도 있음

 

* 콜레이션 Collation

특정 문자셋으로 데이터베이스에 저장된 값을 비교하거나 정렬하는 작업의 규칙을 의미

ex) 대표적으로 utf8_bin은 A,B,a,b 순으로 utf8_general_ci는 A,a,B,b 순으로 정렬 함

 

* 히스토그램 histgram

테이블의 열 값이 어떻게 분포되어 있는지를 확인하는 통계 정보이다. 옵티마이저가 실행 계획을 최적화하기 위해 사용된다.

MySQL에서 내부적으로 열의 분포를 저장 할 때는 '높이 균현 히스토그램' 방식을 사용. 즉, 저장된 데이터 값의 종류가 수백, 수천, 수만개 이상이므로 데이터를 그룹화하고, 정해진 양동이만큼 분리해서 열의 통계정보 데이터를 저장한다.

'DataBase > MySQL' 카테고리의 다른 글

[MySQL] MySQL 서버 업그레이드  (0) 2023.01.07
Comments