안내
본 문서는 블로그의 운영자인 본인이 Stackoverflow에 올린 답변을 정리한 글입니다.
Stackoverflow URL
http://stackoverflow.com/questions/20311929/mysql-query-optimization/20311945
질문
다음과 같은 SQL문을 사용 중인데 속도가 너무 느리다.
SELECT SUM(earnings)
FROM earnings
WHERE account_number IN
(SELECT account_number FROM users WHERE referred_by = 500);
빠르게 할 수 있는 방법은 없는가?
답변
다음과 같은 INNER JOIN으로 변경하는 것이 좋다.
SELECT SUM(earnings.earnings)
FROM earnings INNER JOIN users USING(account_number)
WHERE users.referred_by = 500;
또한 다음의 INDEX가 존재해야 한다.
ALTER TABLE users ADD INDEX (referred_by, account_number);
ALTER TABLE earnings ADD INDEX (account_number);
“MySQL” 카테고리의 추천 글
- MySQL IN subquery 성능. IN sub query는 가급적 사용을 피하자
- MySQL의 IN() v.s. EXISTS v.s. INNER JOIN 성능 비교
- MySQL INNER JOIN v.s EXISTS 성능 비교
- JOIN에서 중복된 레코드 제거하기
- MySQL 중복 레코드 관리 방법 - INSERT IGNORE, REPLACE INTO, ON DUPLICATE UPDATE
- MySQL GROUP BY 성능 최적화를 위한 INDEX 설계
- MySQL Query Cache를 빠르게 비우기
- MySQL Plugin에 대한 간단한 소개
- MySQL InnoDB Index Statistics
- MySQL Foreign key 사용 시 주의 사항 (Can’t create table (errno: 150))