본문 바로가기

SQL 튜닝/SQL 문 단순 수정10

[SQL 튜닝] 열을 결합하여 사용하는 나쁜 SQL 문 열을 결합하여 사용하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 사원 테이블에서 성별의 값과 1칸의 공백(space), 성의 값을 모두 결합한 결과가 'M Radwan'인 데이터를 조회하는 쿼리 EXPLAIN SELECT * FROM 사원 WHERE CONCAT(성별, ' ',성) ='M Radwan'; - 사원 테이블 컬럼 수 : 300024 (약 30만 건) - SQL문 결과 : 총 102건의 결과 출력, 103ms 소요 - 사원 테이블은 CONCAT(성별,' ',성) = 'M Radwan' 조건절로 데이터에 접근하지만, 테이블 풀 스캔 - type 항목 : ALL → 데이터를 처음부터 끝까지 스캔하므로 비효율적임 튜닝 수행 - 총 300,024건 중에 102건의 데이터를 조회하는 쿼리.. 2023. 7. 12.
[SQL 튜닝] 형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문 형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 급여 테이블에서 현재 유효한 급여 정보만 조회하고자 사용여부 열의 값이 1인 데이터를 출력하는 쿼리 EXPLAIN SELECT COUNT(1) FROM 급여 WHERE 사용여부 = 1; - 급여 테이블 컬럼 수 : 2844047 (약 284만 건) - SQL문 결과 : 총 1건의 결과 출력, 373ms 소요 COUNT(1) = 42842 - key 항목 : I_사용여부 인덱스 사용 - type 항목 : index → 인덱스 풀스캔 방식으로 수행 - filtered 항목 : 10 → MYSQL 엔진으로 가져온 데이터 중 10% 추출해서 최종 데이터 출력 즉, rows 항목에 표시된 2,838,438건의 데이터를 스토리.. 2023. 7. 11.
[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.