본문 바로가기

SQL 튜닝/테이블 및 열 속성 설정3

[SQL 튜닝] 분산 없이 큰 규모의 데이터를 사용하는 나쁜 SQL 문 분산 없이 큰 규모의 데이터를 사용하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 급여 테이블에서 시작일자가 2000년 1월 1일부터 2000년 12월 31일에 해당하는 데이터를 모두 집계하는 쿼리 즉, 2000년도의 급여 데이터 건수를 조회 EXPLAIN SELECT COUNT(1) FROM 급여 WHERE 시작일자 BETWEEN STR_TO_DATE('2000-01-01', '%Y-%m-%d') AND STR_TO_DATE('2000-12-31', '%Y-%m-%d'); - SQL문 결과 : 총 1건의 결과(255,785) 출력, 338ms 소요 - 급여 테이블의 I_사용여부 인덱스(key 항목 : I_사용여부)를 활용해서 커버링 인덱스로 수행 - 테이블 접근 없이 인덱스만으로 원하는 데이.. 2023. 8. 14.
[SQL 튜닝] 대소문자가 섞인 데이터와 비교하는 나쁜 SQL 문 대소문자가 섞인 데이터와 비교하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 사원 테이블에서 입사일자가 1990년 이후이고, 이름이 MARY인 사원정보를 조회하는 쿼리 이때 MARY와 1990-01-01은 입력된 변수 값이므로 매번 입력되는 영문의 대소문자는 고정되지 않음 EXPLAIN SELECT 이름, 성, 성별, 생년월일 FROM 사원 WHERE LOWER(이름) = LOWER('MARY') AND 입사일자 >= STR_TO_DATE('1990-01-01', '%Y-%m-%d'); - SQL문 결과 : 총 96건의 결과 출력, 88.6ms 소요 - 테이블 풀 스캔(type 항목 : ALL)으로 수행 - 이름 열은 기본적으로 LOWER() 함수가 가공, 이름 열로 만들어진 인덱스가 존재하더.. 2023. 8. 9.
[SQL 튜닝] 잘못된 열 속성으로 비효율적으로 작성한 나쁜 SQL 문 잘못된 열 속성으로 비효율적으로 작성한 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 부서 테이블의 비고 열값이 소문자 'active' 일 때의 데이터를 조회하는 쿼리 SUBSTR(비고,1,1)과 SUBSTR(비고,2,1)라는 조건절로 비고 열의 데이터에서 첫 번째 문자와 두번째 문자를 각각 추출한 뒤 ASCII 코드값을 비교(아스키 코드 값 : 97 = a, 99 = c 에 해당) EXPLAIN SELECT 부서명, 비고 FROM 부서 WHERE 비고 = 'active' AND ASCII(SUBSTR(비고,1,1)) = 97 AND ASCII(SUBSTR(비고,2,1)) = 99; - SQL문 결과 : 총 4건의 결과(active인 값들) 출력, 0.4ms 소요 (소요 시간이 매우 짧음) 튜닝 .. 2023. 8. 8.