전체 글(253)
-
[업무에 바로 쓰는 SQL 튜닝] 4.2.6 다수 쿼리를 UNION 연산자로만 합치는 나쁜 SQL문
목차❌ 문제의 SQL 문😎 실행 계획 살펴보기⭕ UNION ALL 연산자로 변경해 보자🚀 정리 ❌ 문제의 SQL 문요구사항 : 성이 Baba이면서 성별이 M인 사원 데이터와 성이 Baba이면서 성별이 F인 사원 데이터를 합해서 조회하는 쿼리를 작성해 주세요.select 성별, 사원번호 from 사원 where 성별 = 'M' and 성 = 'Baba'unionselect 성별, 사원번호 from 사원 where 성별 = 'F' and 성 = 'Baba'; 수행 결과+--------+--------------+| 성별 | 사원번호 |+--------+--------------+| M | 11937 || M | ..
2024.10.07 -
[업무에 바로 쓰는 SQL 튜닝] 4.2.5 습관적으로 중복을 제거하는 나쁜 SQL 문
목차❌ 문제의 SQL 문😎 실행 계획 살펴보기⭕ DISTINCT 키워드를 제거해 보자🚀 정리 ❌ 문제의 SQL 문요구사항 : 사원의 사원번호, 이름, 성, 그리고 부서 관리자의 부서번호를 중복 없이 조회하는 쿼리를 작성해 주세요.select distinct 사원.사원번호, 사원.이름, 사원.성, 부서관리자.부서번호from 사원join 부서관리자 on (사원.사원번호 = 부서관리자.사원번호); 수행 결과총 24건이며 소요 시간은 0초에 가깝게 나왔다.😎 실행 계획 살펴보기1. id 값이 둘 다 1이므로 서로 조인하고 있다.2. 부서관리자 테이블의 type이 index로 인덱스 풀 스캔을 하고 있다.3. 사원 테이블의 type은 eq_ref으로 사원번호(PK)를 사용해 1건의 데이..
2024.10.04 -
[업무에 바로 쓰는 SQL 튜닝] 4.2.4 열을 결합하여 사용하는 나쁜 SQL 문
목차❌ 문제의 SQL 문😎 실행 계획 살펴보기⭕ 열을 결합하는 과정을 제거하고, 열을 분리해 보자🚀 정리 ❌ 문제의 SQL 문요구사항 : 사원 테이블에서 성별의 값과 1칸의 공백, 성의 값을 모두 결합한 결과가 ‘M Radwan’인 데이터를 조회하는 쿼리를 작성해 주세요.- CONCAT 함수는 여러 문자열을 연결하는 데 사용SELECT * FROM 사원 WHERE CONCAT(성별, ' ', 성) = 'M Radwan'; 출력 :총 102건이고 소요 시간은 약 0.13초가 나왔다. 😎 실행 계획 살펴보기사원 테이블에만 접근하여 데이터를 가져오고 있다. 문제의 SQL문에서는 WHERE 조건절로 데이터에 접근하는 반면, 실행계획을 확인해 보니 type 항목이 ALL 테이블 풀 스캔을 하고 있..
2024.10.02 -
[업무에 바로 쓰는 SQL 튜닝] 4.2.3 형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문
목차❌ 문제의 SQL 문😎 실행 계획 살펴보기⭕ 형변환이 발생하지 않도록 SQL을 수정해 보자🚀 정리 ❌ 문제의 SQL 문요구사항: 급여 테이블에서 현재 유효한 급여 정보만 조회하는 쿼리를 작성해 주세요.사용여부 열의 값이 1인 데이터가 유효한 급여 정보입니다.SELECT COUNT(*) FROM 급여 WHERE 사용여부 = 1; 출력:1건이 출력되었고 데이터는 총 42,842건이며 sql 소요시간은 약 0.48초로 나타났다. 😎 실행 계획 살펴보기key항목이 I_사용여부로 출력되고, type항목이 index이므로 인덱스 풀 스캔 방식으로 테이블의 데이터를 찾고 있다. 그리고 filtered항목이 10이므로 MySQL엔진으로 가져온 데이터 중 10%를 추출해서 최종 데이터를 출력했다는 것..
2024.09.13 -
[업무에 바로 쓰는 SQL 튜닝] 4.2.2 사용하지 않는 함수를 포함하는 나쁜 SQL문
목차❌ 문제의 SQL 문😎 실행 계획 살펴보기⭕ 불필요한 IFNULL() 함수를 제거해 보자🚀 정리 ❌ 문제의 SQL 문요구사항 : 사원 테이블에서 성별 기준으로 몇 명의 사원이 있는지 확인하는 쿼리문을 작성해 주세요.SELECT IFNULL(성별, 'NO DATA') AS 성별, COUNT(*) 건수 FROM 사원 GROUP BY IFNULL(성별, 'NO DATA') 만약 성별의 값이 NULL이라면 NO DATA라고 출력할 수 있도록 IFNULL() 함수를 사용하여 구현했다.2개의 행이 출력되었고, 약 0.12초가 소요되었다. 😎 실행 계획 살펴보기I_성별_성 인덱스로 인덱스 풀 스캔 방식을 수행하며, Extra 항목이 Using temporary로 임시 테이블을 생성한다는 것을 알 ..
2024.09.10 -
[업무에 바로 쓰는 SQL 튜닝] 4.2.1 기본키를 변형하는 나쁜 SQL문
4장은 문제가 있는 SQL문과 개선된 SQL문을 소개해주고 있다. 팀원과 한 파트씩 나눠서 발표 스터디를 진행하기로 했고, 오늘은 그 첫 번째 사례이다. 나는 도커 컨테이너 하나를 생성하고 안에 실습할 데이터베이스를 미리 넣어두었다. 그랬더니 컨테이너에 접속만 하면 쉽게 실습할 수 있어서 아주 편리했다! 다음은 목차이다. 앞으로도 목차는 비슷하게 흘러갈 예정이다.❌ 문제의 SQL 문😎 실행 계획 살펴보기⭕ 사원번호(기본키)가 인덱스를 타도록 수정해 보자🚀 정리 ❌ 문제의 SQL 문[주의] MySQL에서 문자열의 인덱스는 1부터 시작한다. 요구사항 :사원번호가 1100으로 시작하면서 사원번호가 5자리인 사원의 정보를 모두 출력해 주세요.SELECT * FROM 사원 WHERE SUBSTRI..
2024.09.08