MariaDB DBMS/MariaDB 튜닝 2(5)
-
[SQL 튜닝 실습] SQL 튜닝 중급 5
대소문자가 섞인 데이터와 비교하는 나쁜 SQL문 튜닝 전 SQL문 튜닝 전 SQL문은 사원테이블에서 입사일자가 1990년 이후이고 이름이 MARY인 사원정보를 조회하는 쿼리로 MARY와 1990-01-01은 화면에서 입력된 변숫값이므로 매번 입력되는 영문의 대소문자는 고정되지 않는다. select 이름, 성, 성별, 생년월일 from 사원 where lower(이름) = lower('MARY') and 입사일자 >= STR_TO_DATE('1990-01-01', '%Y-%m-%d') 튜닝 전 실행계획 where 조건문에 이름과 입사일자 컬럼이 명시되어 있지만 테이블 풀 스캔으로 수행된다 이름 컬럼은 기본적으로 lower() 함수가 가공하므로 이름 컬럼으로 만들어진 인덱스가 존재하더라도 활용은 불가능하다...
2021.08.10 -
[SQL 튜닝 실습] SQL 튜닝 중급 4
비효율적인 인덱스를 사용하는 나쁜 SQL 문 튜닝 전 SQL 문 select 사원번호, 이름, 성 from 사원 where 성별 = 'M' and 성 = 'Baba'; 튜닝 전 실행 계획 explain select 사원번호, 이름, 성 from 사원 where 성별 = 'M' and 성 = 'Baba'; I_성별_성 인덱스를 활용해서 사원테이블에 접근 성별과 성 컬럼에 고정된 값으로 조건절 ref 항목 : const, const를 작성해서 인덱스 스캔으로 원하는 데이터에 접근 튜닝 수행 select count(distinct 성) 성_개수, count(distinct 성별) 성별_개수 from 사원; 사원 테이블의 인덱스 show index from 사원; 데이터값이 다양하지 않은 성별 컬럼을 선두로 구..
2021.08.10 -
[SQL 튜닝 실습] SQL 튜닝 중급 3
인덱스를 하나만 사용하는 나쁜 SQL 문 튜닝 전 SQL 문 select * from 사원 where 이름 = 'Matt' or 입사일자 = '1987-03-31' 튜닝 전 쿼리라고 해도 짧은 소요시간만을 기준으로 삼지않으며 더 나은 쿼리로 개선할 수 있다면 튜닝대상이 된다. 튜닝 전 실행계획 explain select * from 사원 where 이름 = 'Matt' or 입사일자 = '1987-03-31' 사원 테이블은 테이블 풀 스캔(ALL) 으로 처리된다. 튜닝 수행 조건절에 해당하는 데이터 분포 확인 이름=Matt : 233 건 입사일자=1987-03-31 : 111건 전체 데이터가 약 30만 건에 달하는 사원 테이블의 데이터 건수와 비교했을 때 이름 컬럼과 입사일자 컬럼의 조건절에서 조회하는 ..
2021.08.10 -
[SQL 튜닝 실습] SQL 튜닝 중급 2
필요 이상으로 많은 정보를 가져오는 나쁜 SQL 문 튜닝 전 SQL 문 select count(사원번호) as 카운트 from ( select 사원.사원번호, 부서관리자.부서번호 from ( select * from 사원 where 성별 = 'M' and 사원번호 > 300000 ) 사원 left join 부서관리자 on 사원.사원번호 = 부서관리자.사원번호 ) 서브쿼리; 튜닝 전 실행계획 id가 1인 행만 있으므로 먼저 출력된 사원테이블이 데이터에 접근하는 드라이빙 테이블이고 나중에 출력된 부서관리자 테이블이 드리븐 테이블임을 알 수 있다. 사원 테이블은 사원번호 > 300000 조건때문에 레인지스캔을 수행하며 기본키를 활용해서 데이터에 접근할 것임을 알 수 있다. 부서관리자 테이블은 사원.사원번호 =..
2021.08.09 -
[SQL 튜닝 실습] SQL 튜닝 중급 1
SQL 문 재작성으로 착한쿼리 만들기 처음부터 모든 데이터를 가져오는 나쁜 SQL 문 튜닝 전 SQL 문 select 사원.사원번호, 급여.평균연봉, 급여.최고연봉, 급여.최저연봉 from 사원, ( select 사원번호, round(avg(연봉),0) 평균연봉, round(max(연봉),0) 최고연봉, round(min(연봉),0) 최저연봉 from 급여 group by 사원번호 ) 급여 where 사원.사원번호 = 급여.사원번호 and 사원.사원번호 between 10001 and 10100; 튜닝 전 실행계획 튜닝 후 SQL 문 select 사원.사원번호, ( select round(avg(연봉), 0) from 급여 as 급여1 where 사원번호 = 사원.사원번호 ) as 평균연봉, ( sele..
2021.08.09