본문 바로가기
반응형
SMALL

전체 글125

[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.
[SQL 튜닝] 메인 테이블에 계속 의존하는 나쁜 SQL 문 메인 테이블에 계속 의존하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 사원번호가 450,000보다 크고, 최대 연봉이 100,000보다 큰 데이터를 찾아 출력하는 쿼리 사원번호가 450,000번을 초과하면서 그동안 받은 연봉 중 한 번이라도 100,000를 초과한 적이 있는 사원 정보 출력 EXPLAIN SELECT 사원.사원번호, 사원.이름, 사원.성 FROM 사원 WHERE 사원번호 > 450000 AND (SELECT MAX(연봉) FROM 급여 WHERE 사원번호 = 사원.사원번호) > 100000; - SQL문 결과 : 총 3,155건의 결과 출력, 193 ms 소요 - 먼저 FROM 절의 메인 테이블인 사원 테이블에 접근 - id가 1인 사원 테이블이 기본 키 (key: PRIMA.. 2023. 7. 20.
[SQL 튜닝] 작은 테이블이 먼저 조인에 참여하는 나쁜 SQL 문 작은 테이블이 먼저 조인에 참여하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 부서사원_매핑 테이블과 부서 테이블을 조인하여 부서 시작일자가 '2002-03-01' 이후인 사원의 데이터 조회하는 쿼리 EXPLAIN SELECT 매핑.사원번호, 부서.부서번호 FROM 부서사원_매핑 매핑, 부서 WHERE 매핑.부서번호 = 부서.부서번호 AND 매핑.시작일자 >= '2002-03-01'; - SQL문 결과 : 총 1,341건의 결과 출력, 327 ms 소요 - 드라이빙 테이블인 부서 테이블과 드리븐 테이블인 부서사원_매핑 테이블은 중첩 루프 조인을 수행 - 작은 크기의 부서 테이블에서 부서.부서번호 열만 SELECT 절과 WHERE 절에 필요 → UI_부서명 인덱스 활용해 인덱스 풀 스캔 - 부.. 2023. 7. 19.
[SQL 튜닝] 범위 조건으로 인덱스를 사용하는 나쁜 SQL 문 범위 조건으로 인덱스를 사용하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 입사일자가 1994년 1월 1일부터 2000년 12월 31일까지인 사원들의 이름과 성을 출력하는 쿼리 EXPLAIN SELECT 이름, 성 FROM 사원 WHERE 입사일자 BETWEEN STR_TO_DATE('1994-01-01', '%Y-%m-%d') AND STR_TO_DATE('2000-12-31', '%Y-%m-%d'); - SQL문 결과 : 총 48,875건의 결과 출력, 116 ms 소요 튜닝 수행 SELECT COUNT(1) FROM 사원; - 사원 테이블 : 총 데이터 300,024건 (튜닝 전 SQL 문의 결과 건수 48,875 건 - 약 17%) - 인덱스를 사용하는 것이 효율적일지, 아니면 인덱스 .. 2023. 7. 18.
반응형
LIST