본문 바로가기

SQL 튜닝/테이블 조인 설정 변경3

[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.