본문 바로가기

SQL 튜닝24

[SQL 튜닝] 인덱스 없이 작은 규모의 데이터를 조회하는 나쁜 SQL 문 인덱스 없이 작은 규모의 데이터를 조회하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 이름이 Georgi이고, 성이 Wielonsky인 사원 정보를 출력하는 쿼리 EXPLAIN SELECT * FROM 사원 WHERE 이름 = 'Georgi' AND 성 = 'Wielonsky'; - SQL문 결과 : 총 1건의 결과 출력, 85.8ms 소요 - 사원 테이블 : 테이블 풀 스캔(type항목 : ALL) - 스토리지 엔진에서 가져온 전체 데이터 중 WHERE 이름 = 'Georgi' AND 성 = 'Wielonsky' 조건절로 필요한 데이터 추출(Extra 항목: Using where)하여 출력 튜닝 수행 - 최종적으로 1건의 데이터를 가져오고자 테이블을 처음부터 끝까지 풀 스캔하는 방식은 비효.. 2023. 7. 30.
[SQL 튜닝] 대량의 데이터를 가져와 조인하는 나쁜 SQL 문 대량의 데이터를 가져와 조인하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 부서관리자 테이블과 부서사원_매핑 테이블을 부서번호 열로 조인하고 중복을 제거한 부서번호를 출력하는 쿼리 즉, 부서의 관리자가 소속된 부서번호를 조회하면서 부서사원_매핑 테이블에도 있는 부서번호를 선택 EXPLAIN SELECT DISTINCT 매핑.부서번호 FROM 부서관리자 관리자, 부서사원_매핑 매핑 WHERE 관리자.부서번호 = 매핑.부서번호 ORDER BY 매핑.부서번호; - SQL문 결과 : 총 9건의 결과 출력, 382ms 소요 - 부서번호 정보에서 중복이 제거되고 오름차순으로 정렬된 9건의 데이터 출력 - id가 1인 부서사원_매핑 테이블과 부서관리자 테이블의 2개 행 출력 - 드라이빙 테이블 : 부서사원.. 2023. 7. 29.
[SQL 튜닝] 필요 이상으로 많은 정보를 가져오는 나쁜 SQL 문 필요 이상으로 많은 정보를 가져오는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 사원 테이블에서 성별이 M(남)이고, 사원번호가 300,000을 초과하는 사원 대상으로 부서관리자 테이블과 외부 조인을 수행한 뒤, 해당하는 사원번호의 개수를 출력하는 쿼리 SELECT COUNT(사원번호) AS 카운트 FROM ( SELECT 사원.사원번호, 부서관리자.부서번호 FROM (SELECT * FROM 사원 WHERE 성별 ='M' AND 사원번호 > 300000 ) 사원 LEFT JOIN 부서관리자 ON 사원.사원번호 = 부서관리자.사원번호 ) 서브쿼리 /* 실행계획 */ EXPLAIN SELECT COUNT(사원번호) AS 카운트 FROM ( SELECT 사원.사원번호, 관리자.부서번호 FROM (S.. 2023. 7. 28.
[SQL 튜닝] 비효율적인 페이징을 수행하는 나쁜 SQL 문 비효율적인 페이징을 수행하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 사원 테이블과 급여 테이블의 내부 조인을 수행하는 쿼리 사원번호가 10,0001 ~ 50,000번에 사이에 해당하는 데이터들을 사원번호 기준으로 그루핑한 뒤 연봉 합계 기준으로 내림차순 정렬 (150번째 데이터부터 10건의 데이터만 제한) EXPLAIN SELECT 사원.사원번호, 사원.이름, 사원.성, 사원.입사일자 FROM 사원, 급여 WHERE 사원.사원번호 = 급여.사원번호 AND 사원.사원번호 BETWEEN 10001 AND 500000 GROUP BY 사원.사원번호 ORDER BY SUM(급여.연봉) DESC LIMIT 150,10; - SQL문 결과 : 총 10건의 결과 출력, 1.59s 소요 - 드라이빙 테이.. 2023. 7. 27.
[SQL 튜닝] 처음부터 모든 데이터를 가져오는 나쁜 SQL 문 처음부터 모든 데이터를 가져오는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 사원번호가 10,0001번부터 10,100번까지인 사원들의 평균연봉과 최고연봉, 최저연봉을 구하는 쿼리FROM 절의 급여 테이블에 사원별 평균/최고/최저 연봉을 조회하는 인라인 뷰가 있고, 사원 테이블의 사원번호 열과 내부 조인하여 최종 통계 결과 출력 EXPLAIN SELECT 사원.사원번호, 급여.평균연봉, 급여.최고연봉, 급여.최저연봉 FROM 사원, (SELECT 사원번호, ROUND(AVG(연봉),0) 평균연봉, ROUND(MAX(연봉),0) 최고연봉, ROUND(MIN(연봉),0) 최저연봉 FROM 급여 GROUP BY 사원번호 ) 급여 WHERE 사원.사원번호 = 급여.사원번호 AND 사원.사원번호 BETW.. 2023. 7. 24.
[SQL 튜닝] 불필요한 조인을 수행하는 나쁜 SQL 문 불필요한 조인을 수행하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | FROM 절에서 사원 테이블과 사원출입기록 테이블로 작성한 인라인 뷰를 사원번호 열로 내부 조인하는 쿼리 즉, A출입문으로 출입한 사원이 총 몇 명인지 구하는 쿼리 EXPLAIN SELECT COUNT(DISTINCT 사원.사원번호) as 데이터건수 FROM 사원, (SELECT 사원번호 FROM 사원출입기록 기록 WHERE 출입문 = 'A') 기록 WHERE 사원.사원번호 = 기록.사원번호; - SQL문 결과 : 총 1건의 결과 출력(데이터 건수 150000), 359 ms 소요 - id 둘다 1 → 조인 수행 - 드라이빙 테이블인 사원출입기록 테이블은 I_출입문 인덱스 활용하여 A 출입문에 관한 기록이 있는 사원번호를 구함.. 2023. 7. 22.