MySQL 튜닝(10)
-
[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문으로 요청한 데이터를 어떻게 조회할 것인지에 대한 계획, 즉 경로에 대한 계획이다. (*) 여기서부터는 GUI인 MYSQL 워크벤치를 사용 기본실행계획 수행문 : 아래 아무거나 사용해도 된다. 개인적으로 EXPLAIN 사용 EXPLAIN SQL문; DESC SQL문; 실행계획 수행 SQL문 앞에 EXPLAIN 키워드를 입력하고 실행하면 옵티마이저가 만든 실행계획이 출력된다. use tuning; show tables; explain select * from 사원 where 사원번호 between 100001 and 200000; (*) 마리아 DB 버전 10.0.5 이상에서는 UPDATE 및 DELETE 문에서도 실행계획을 확인할 수 있다. 기본 실행계획 항목 분석 EXPLAIN ..
2021.08.09 -
[SQL 튜닝 실습] SQL 튜닝 준비 1
실습환경 구성하기 마리아DB 설치 다운로드 기본구성 서비스 네임 마리아DB bin 경로로 이동 후 실행 cd C:\Program Files\MariaDB 10.5\bin mysql -uroot -p --port 3333 show databases; 데이터 세팅하기 실습파일 다운로드 다운로드 후 저장 폴더 C:\db_data\
2021.08.09 -
[SQL 튜닝 실습] SQL 튜닝 기초 6
테이블 조인 설정 변경으로 착한 쿼리 만들기 작은 테이블이 먼저 조인에 참여하는 나쁜 SQL 문 튜닝 전 SQL 문 select 매핑.사원번호, 부서.부서번호 from 부서사원_매핑 매핑, 부서 where 매핑.부서번호 = 부서.부서번호 and 매핑.시작일자 >= '2002-03-01'; 튜닝 전 실행계획 explain select 매핑.사원번호, 부서.부서번호 from 부서사원_매핑 매핑, 부서 where 매핑.부서번호 = 부서.부서번호 and 매핑.시작일자 >= '2002-03-01'; 드라이빙 테이블인 부서 테이블과 드리븐 테이블인 부서사원_매핑 테이블은 중첩 루프 조인을 수행 UI_부서명 인덱스를 활용해 인덱스 풀 스캔을 한다. 드리븐 테이블에서 대량 데이터에 대해 랜덤 액세스를 하면 비효율적이다..
2021.08.09 -
[SQL 튜닝 실습] SQL 튜닝 기초 5
동등 조건으로 인덱스를 사용하는 나쁜 SQL 문 튜닝 전 SQL 문 select * from 사원출입기록 where 출입문 = 'B' 튜닝 전 실행계획 explain select * from 사원출입기록 where 출입문 = 'B' I_출입문 인덱스를 사용해서 데이터에 접근한다. 명확한 상수화 조건으로 데이터 접근 범위를 줄였기때문에 ref 항목이 const로 출력된다. (*) MariaDB 신버전의 경우 ALL 타입(테이블 풀 스캔)으로 출력된다. 튜닝 수행 select 출입문, count(1) from 사원출입기록 group by 출입문 튜닝 후 SQL 문 select * from 사원출입기록 ignore index(I_출입문) where 출입문 = 'B' 출입문 B는 총 66만 건 전체 데이터 중 ..
2021.08.09