[SQL 튜닝 실습] SQL 튜닝 기초 2
2021. 8. 8. 22:55ㆍMariaDB DBMS/MariaDB 튜닝 1
반응형
형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문
튜닝 전 SQL 문
select count(1)
from 급여
where 사용여부 = 1;
튜닝 전 분석
explain
select count(1)
from 급여
where 사용여부 = 1;
인덱스 확인 필요
show index
from 급여;
테이블 구조 확인 필요
desc 급여;
조건문에 사용되는 사용여부 열 값이 숫자 타입으로 써서 데이터에 접근해서
DBMS 내부의 묵시적 형변환이 발생했다
따라서 형변환이 발생하지 않도록 SQL문을 조정해야 한다.
튜닝 후 SQL
select count(1)
from 급여
where 사용여부 = '1';
실행계획
explain
select count(1)
from 급여
where 사용여부 = '1';
I_사용여부 인덱스를 사용해서 데이터에 접근함을 알 수 있다.
필요한 데이터 82,824 건만 접근한다.
열을 결합해서 사용하는 나쁜 SQL 문
튜닝 전 SQL 문
select *
from 사원
where concat(성별, ' ', 성) = 'M Radwan';
튜닝 수행
select concat(성별, ' ', 성) '성별_성', count(1)
from 사원
where concat(성별, ' ', 성) = 'M Radwan'
union all
select '전체 데이터', count(1)
from 사원;
성별 열과 성 열로 구성된 I_성별_열 인덱스를 사용할 수 있고
조건문도 동등 조건(=) 이므로 인덱스를 활용하여 데이터를 빠르게 조회할 수 있다.
튜닝 후 SQL문
select *
from 사원
where 성별 = 'M'
and 성 = 'Radwan'
튜닝 전에는 concat() 함수로 인덱스 열들을 가공했지만,
튜닝 후 SQL 문에서는 각 열을 분리하고 열의 변형을 제거했다.
튜닝 후 실행계획
explain
select *
from 사원
where 성별 = 'M'
and 성 = 'Radwan'
튜닝 전에는 30만건의 데이터에 접근했다면,
튜닝 후에는 102건의 데이터에만 접근하므로 액세스 범위가 줄었다.
반응형
'MariaDB DBMS > MariaDB 튜닝 1' 카테고리의 다른 글
[SQL 튜닝 실습] SQL 튜닝 기초 5 (0) | 2021.08.09 |
---|---|
[SQL 튜닝 실습] SQL 튜닝 기초 4 (0) | 2021.08.09 |
[SQL 튜닝 실습] SQL 튜닝 기초 3 (0) | 2021.08.08 |
[SQL 튜닝 실습] SQL 튜닝 기초 1 (0) | 2021.08.08 |