2021. 8. 8. 11:23ㆍMariaDB DBMS/MariaDB 튜닝용어
응용 용어
선택도
특정 컬럼을 기준으로 조건절에 따라 선택되는 데이터 비율
해당 컬럼에 중복되는 데이터가 많으면 "선택도가 높다"
중복 데이터가 적으면 "선택도가 낮다"
낮은 선택도의 컬럼을 인덱스로 지정한다
선택도 = 선택한 데이터 건수 / 전체 데이터 건수
변형된 선택도 = 1 / DISTINCT(COUNT 열명)
학번 컬럼의 선택도 = 1 / 100
0.01 의 선택도라면 낮은 선택도라고 할 수 있다
성별 열 컬럼의 선택도 = 50 / 100
0.5 의 선택도라면 높은 선택도라고 할 수 있다.
카디널리티
하나의 데이터 유형으로 정의되는 데이터 행의 개수
전체 데이터에 접근 후 출력될 것이라고 예상되는 데이터 건수를 말함
현업에서는 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표로 활용
카디널리티 = 전체 데이터 건수 X 선택도
중복도가 높으면 카디널리티가 낮고
중복도가 낮으면 카디널리티가 높다
성별 컬럼의 데이터는 중복 데이터가 아주 많기때문에 카디널리티가 낮다.
예)
주민등록번호 : 카디널리티 높음
이름 : 카디널리티 중간
성별 : 카디널리티 낮음
힌트
데이터를 빨리 찾을 수 있게 추가정보를 전달하는 것
방법 : 사용할 인덱스를 지정한다.
1. FROM 테이블명 뒤에 /*! USE INDEX (학생_IDX01) */
2. FROM 테이블명 뒤에 USE INDEX (학생_IDX01)
주요 목록
STRAIGHT_JOIN : FROM 절에 작성된 테이블 순으로 조인을 유도하는 힌트
USE INDEX : 특정 인덱스를 사용하도록 유도하는 힌트
팁
명시적으로 힌트를 작성해도 옵티마이저는 무조건 힌트를 참고하지는 않는다
옵티마이저가 비효율적이라고 판단하면 작성된 힌트는 무시될 수 있다.
힌트가 적용된 서비스 환경에서는 데이터 건수가 수시로 급변할 수 있고,
테이블이나 인덱스 / 뷰 등에 변화가 생기면 SQL문 실행 시 오류가 발생할 가능성도 있다.
이 때는 SQL 문에 힌트를 작성하면 별도로 관리해야한다.
1) 첫째날
SELECT *
FROM 학생 USE INDEX(학생_IDX01)
WHERE 이름 = ?;
2) 둘째날
ALTER TABLE 학생
DROP INDEX 학생_IDX01;
(*) 담당자가 SQL문에 삭제하려고 할 인덱스가 포함되어있는지 확인하지도 않고
학생_IDX01 인덱스를 불필요한 인덱스라고 판단하고 삭제하는 쿼리
삭제 후 ERROR 1176 발생
콜레이션
특정 문자셋으로 DB에 저장된 값을 비교하거나 정렬하는 작업의 규칙
콜레이션의 대소관계 비교
콜레이션에 따라 대소 관계의 출력도 달라진다.
히스토그램
테이블의 컬럼값이 어떻게 분포되어 있는지 확인하는 통계정보
옵티마이저가 실행계획을 최적화하고자 참고하는 정보로
잘못된 히스토그램 정보가 있다면 잘못된 실행계획으로 SQL문이 수행될 수 있다.
생성
ANALYZE TABLE 테이블명
PERSISTENT FOR COLUMNS (열명 나열)
INDEXES (인덱스명 나열);
예시
ANALYZE TABLE 사원
PERSISTENT FOR COLUMNS (사원번호, 이름)'/
INDEXES();
확인
SELECT * FROM
mysql.column_stats;
'MariaDB DBMS > MariaDB 튜닝용어' 카테고리의 다른 글
[SQL 튜닝 실습] SQL 튜닝용어 정리 2 (0) | 2021.08.08 |
---|---|
[SQL 튜닝 실습] SQL 튜닝용어 정리 1 (0) | 2021.08.08 |