SQL/SQL 튜닝
4장 악성 SQL 튜닝으로 초보자 탈출하기 - (2)
domsam
2025. 3. 25. 18:09
반응형
아래 접은글로 되어있는 내용을 보기 전에 각 예제의 내용을 확인하고 본인이 생각하는 쿼리문을 먼저 작성해 보세요.
4.2.1 기본 키를 변형하는 BAD SQL
사원번호(emp_no)가 1,100 이상이면서 사원번호가 5자리인 사원(employees)의 모든 정보를 출력하는 쿼리를 만들어 주세요. (찾은 행: 10)
더보기
튜닝 전 SQL문 - 10 rows in set (0.23 sec)
SELECT *
FROM employees
WHERE SUBSTRING(emp_no, 1, 4) = 1100
AND LENGTH(emp_no) = 5;
-- 4.2.1
-- 10개 레코드
SELECT emp_no, SUBSTRING(emp_no, 1, 4)
, LENGTH(emp_no), LENGTH(emp_no) = 5
FROM employees;
-- 4.2.2
EXPLAIN
SELECT IFNULL(gender, 'NO DATA') AS group_gender
, COUNT(1) AS cnt
FROM employees
GROUP BY group_gender;
EXPLAIN
SELECT gender
, COUNT(1) AS cnt
FROM employees
GROUP BY gender;
-- 4.2.3
-- 묵시적 형변환, (문자열 - 숫자형)
EXPLAIN
SELECT COUNT(1)
FROM salaries
WHERE yn_use = 1;
EXPLAIN
SELECT COUNT(1)
FROM salaries
WHERE yn_use = '1';
EXPLAIN
SELECT COUNT(1)
FROM salaries
WHERE CAST(yn_use AS SIGNED) = 1;
SELECT yn_use
, CAST(yn_use AS SIGNED)
, CONVERT(yn_use, SIGNED)
FROM salaries;
-- 4.2.4
EXPLAIN
SELECT *
FROM employees
WHERE CONCAT(gender, ' ', last_name) = 'M radwan';
SELECT gender, last_name, CONCAT(gender, ' ', last_name)
FROM employees;
EXPLAIN
SELECT *
FROM employees
WHERE gender = 'M'
AND last_name = 'radwan';
-- 4.2.5
SELECT e.emp_no, e.first_name, e.last_name, de.dept_no
FROM employees e
INNER JOIN dept_emp de
ON e.emp_no = de.emp_no;
-- dept_emp에서 부서가 2개 이상인 emp_no를 찾아주세요. (31,579)
SELECT emp_no, COUNT(emp_no)
FROM dept_emp
GROUP BY emp_no
HAVING COUNT(emp_no) > 1;