티스토리 뷰
반응형
최근에 구축 중인 사이트가 있는데, 방대한 양의 시세 정보 데이터를 적재하고 이를 검색서비스를 제공하는 사이트이다.
여러 다른서버들이 있어 다른서버의 시세도 한눈에 보게끔 해주고 싶었는데, 아무 생각 없이 where 에 in 으로 서브 쿼리를 넣어 주는걸로 작성을 해주었더니, 시간이 매우 오래 걸렸다.
SELECT * FROM auction
WHERE idx IN (
SELECT MAX(idx) FROM auction
WHERE item_id = :item_id
GROUP BY realm_id, auction_house_id, item_id)
ORDER BY price_min DESC;
위 쿼리의 결과가 도출되는데 4초에서 6초가 소요되었다. 개선을 해볼수 있지 않을까 싶어 여러 검색을 해보았는데, where 에서는 서브 쿼리를 절대 쓰지 말라, join 을 사용하라는 글이 많이 있어 join 으로 변경 해보았다.
SELECT main.* FROM auction AS main
JOIN (
SELECT MAX(idx) AS max_idx
FROM auction WHERE item_id = :item_id
GROUP BY realm_id, auction_house_id, item_id) AS sub
ON main.idx = sub.max_idx
ORDER BY price_min DESC
이렇게 변경 하니 채 1초도 걸리지 않았다. 10~30ms가 소요되었다...
서브쿼리가 참 최악인가보다.
반응형
'프로그래밍 > MySQL' 카테고리의 다른 글
| 워드프레스 설치시, "데이터베이스 연결 중 오류" 발생. (0) | 2023.07.28 |
|---|---|
| 실수로 용량이 큰 테이블에 OPTIMIZE TABLE을 실행 했을 때 (0) | 2022.11.23 |
| MySQL 기본적인 모니터링 방법과 Connection과 Memory 튜닝 방법 (0) | 2016.06.29 |
| Running a syntax check on /etc/my.cnf (0) | 2016.06.29 |
| mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead [duplicate] (0) | 2016.05.11 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 카뱅
- etf
- 우회
- 내집마련
- 주담대
- 적금
- 2026
- 안과
- 신혼부부
- 연말정산
- 혜택
- 정부
- 안드로이드
- 앱테크
- 카카오뱅크
- 출산
- php
- 아파트매매
- 세금
- 투자
- 재테크
- 대출
- 금융
- 지도
- remove
- 고금리
- 해외주식
- 부동산
- ubuntu
- 공제
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
글 보관함