본문 바로가기

전체 글123

[SQL 튜닝] 사용하지 않는 함수를 포함하는 나쁜 SQL 문 사용하지 않는 함수를 포함하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 사원 테이블에서 성별 기준으로 몇 명의 사원이 있는지 출력하는 쿼리 EXPLAIN SELECT IFNULL(성별, 'NO DATA') AS 성별, COUNT(1) 건수 FROM 사원 GROUP BY IFNULL(성별, 'NO DATA'); - 사원 테이블 컬럼 수 : 300024 (약 30만건) - SQL문 결과 : 총 2건의 결과 출력, 115ms 소요 M(남) - 179973, F(여) - 120051 - 성별의 값이 NULL 이면 NO DATA 출력 (IFNULL 처리) - Key 항목 : I_성별_성 인덱스로 나타나므로 인덱스 풀 스캔 방식으로 수행 - Extra 항목 : Using temporary 이므로 임시.. 2023. 7. 10.
[SQL 튜닝] 기본 키를 변형하는 나쁜 SQL 문 실무적인 SQL 튜닝 절차  기본 키를 변형하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | EXPLAIN SELECT * FROM 사원 WHERE SUBSTRING(사원번호,1,4) =1100 AND LENGTH(사원번호)=5; - 사원 테이블 컬럼 수 : 300024 (약 30만건) - SQL문 결과 : 총 10건의 결과 출력, 100ms 소요 - type 항목 : ALL → 테이블 풀 스캔 방식 - 인덱스를 사용하지 않고 테이블에 바로 접근함 - 필요한 범위에만 접근하는 대신 처음부터 끝까지 스캔하기 때문에 비효율적임 현황 분석 기본 키와 인덱스 현황 확인 기본 키(PRIMARY) : 사원번호 인덱스 : I_입사일자, I_성별_성(성별, 성) (3개) SHOW index FROM 사원; .. 2023. 7. 8.
[MYSQL] 확장된 실행 계획 수행 좋고 나쁨을 판단하는 기준 select_type 항목의 판단 기준 좋음 : SIMPLE, PRIMARY, DERIVED 나쁨 : DEPENDENT *, UNCACHEABLE * type 항목의 판단 기준 좋음 : system, const, eq_ref 나쁨 : index, all extra 항목의 판단 기준 좋음 : Using index 나쁨 : Using filesort, Using temporary MYSQL의 확장된 실행 계획 수행 | EXPLAIN FORMAT = TRADITIONAL | 실행 계획 확인하는 키워드 EXPLAIN 사용 → 기본 포맷 TRADITIONAL | EXPLAIN FORMAT =TREE | 트리형태로 추가된 실행 계획 항목 확인 EXPLAIN FORMAT = TREE.. 2023. 7. 7.
[MYSQL] 실행 계획 수행 - rows, filtered, extra 기본 실행 계획 항목 분석 id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, extra rows SQL문을 수행하고자 접근하는 데이터의 모든 행(row)수를 나타내는 예측 항목 수시로 변동되는 MYSQL의 통계정보를 참고하여 산출하는 값이므로 수치가 정확하지 않음 최종 출력될 행 수 가 아니라는 점에 유의해야 함 SQL문의 최종 결과 건수와 비교해 rows 수가 크게 차이 날 때는 SQL 튜닝 대상 filtered SQL문을 통해 DB 엔진으로 가져온 데이터 대상으로 필터 조건에 따라 어느 정도의 비율로 데이터를 제거했는지를 의미하는 항목 DB 엔진으로 100건의 데이터를 가져왔다고 가정 W.. 2023. 7. 6.
[MYSQL] 실행 계획 수행 - possibile_keys, key, key_len, ref 기본 실행 계획 항목 분석 id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, extra possibile_keys 옵티마이저가 SQL문을 최적화하고자 사용할 수 있는 인덱스 목록을 출력 실제 사용한 인덱스가 아닌, 사용할 수 있는 후보군의 기본 키와 인덱스 목록만 보여줌 → SQL튜닝 효용성 없음 key 옵티마이저가 SQL문을 최적화하고자 사용한 기본 키(PK) 또는 인덱스명을 의미 어떤 인덱스로 데이터 검색했는지 확인 가능 → 비효율적인 인덱스를 사용, 인덱스 자체를 사용하지 않았다면 SQL 튜닝 대상 1. 기본 키(PK)로 데이터 접근 EXPLAIN SELECT 사원번호 FROM 직급 .. 2023. 7. 5.
[MYSQL] 실행 계획 수행 - table, partitions, type 기본 실행 계획 항목 분석 id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, extra table 테이블명을 표시하는 항목, 실행 계획 정보에 테이블명이나 테이블 별칭(alias)를 출력 서브쿼리나 임시 테이블을 만들어서 별도의 작업을 수행할 때는 라고 출력 EXPLAIN SELECT 사원.사원번호, 급여.연봉 FROM 사원, (SELECT 사원번호, MAX(연봉) as 연봉 FROM 급여 WHERE 사원번호 BETWEEN 10001 AND 20000 GROUP BY 사원번호) as 급여 WHERE 사원.사원번호 = 급여.사원번호; 첫번 째 행의 table 열 : , id = 1 두번 째 행.. 2023. 7. 4.