gender 컬럼은 NOT NULL이기 때문에 애초에 null값이 있을 수 없었음. 쓸데없는 작업이 추가되면서 임시 테이블을 사용하게 되었음. Extra 컬럼에 Using temporary가 표시됨
SELECT IFNULL(gender, 'NO DATA') AS group_gender
, COUNT(1) AS cnt
FROM employees
GROUP BY group_gender;
튜닝 후 SQL문
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;