[SQL 튜닝 실습] SQL 튜닝 기초 2

2021. 8. 8. 22:55MariaDB 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건의 데이터에만 접근하므로 액세스 범위가 줄었다.

 

 

 

반응형