DB 쿼리 최적화 시 DB 처리와 애플리케이션 처리의 기준이 궁금합니다
2
3 asked
DB 쿼리를 설계하면서 항상 궁금했던 점이 있습니다.
쿼리가 점점 복잡해지다 보면 Sort, GROUP BY 등의 연산을 DB에서 처리하는 것보다, 데이터를 애플리케이션으로 가져온 후 애플리케이션에서 처리하는 것이 더 효율적이지 않을까 하는 생각이 들 때가 있습니다.
그렇다면 일반적으로 DB 쿼리를 최적화할 때는 애플리케이션으로 데이터를 가져와 처리하기보다는, 적절한 Index 설계를 통해 가능한 한 DB에서 연산을 처리하는 것이 맞는 방향일까요?
아니면 상황에 따라서는 필요한 데이터를 DB에서 조회한 후, 일부 연산을 애플리케이션에서 처리하는 것도 하나의 최적화 방법이 될 수 있을까요?
제가 생각하는 방향 자체가 잘못된 것인지, 아니면 실제로 상황에 따라 고려할 수 있는 방법인지 궁금해서 질문드립니다.
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다. magicsof님
DB와 애플리케이션 중 어디에서 연산을 처리할지는 데이터 전송량, 처리 대상 데이터의 크기, 연산의 성격, 비즈니스 로직 여부에 따라 판단해야 합니다.
일반적으로 WHERE를 통한 필터링, SUM, AVG 같은 집계, GROUP BY, 필요한 컬럼만 조회하는 작업은 DB에서 처리하는 것이 좋습니다. DB는 이러한 데이터 처리와 집계에 최적화되어 있으며, 애플리케이션으로 전송해야 하는 데이터의 양도 줄일 수 있기 때문입니다. 이때 적절한 인덱스를 설계하면 정렬이나 필터링 성능을 더욱 개선할 수 있습니다.
반면 애플리케이션의 비즈니스 규칙이나 표현 형식에 가까운 로직은 애플리케이션에서 처리하는 편이 좋습니다. 다만 전체 데이터를 애플리케이션으로 가져와 처리하는 방식은 데이터가 많을 경우 메모리 사용량과 네트워크 비용이 크게 증가할 수 있으므로 주의해야 합니다. 결국 실행 계획과 실제 데이터 규모를 기준으로 양쪽 방식을 비교해야 합니다.
관련 답변을 참고해 주세요.
DB에 날리는 쿼리는 최대한 간단하게 하라는 의미
WHERE,SUM,AVG와 같은 필터링·집계 연산은 DB에서 처리해 데이터 전송량을 줄이고, 그 외 비즈니스 로직은 애플리케이션에서 처리하는 기준을 설명합니다.쿼리로 어느정도의 연산 레벨까지 허용 하는게 맞을까요?
DB의 역할을filter(where),projection(select),aggregation(group by)로 구분하고, 비즈니스 로직과 프레젠테이션 로직을 어디에서 처리할지 설명합니다.실무에서 페이징 처리
전체 데이터를 애플리케이션으로 가져와 처리할 때 발생할 수 있는 메모리 부족과 성능 저하 문제를 설명하며, 기본적으로 쿼리 단계에서 최적화하는 방향을 안내합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
디비를 조작하는데 사용하는 명령어가 ORM인가요?
0
6
2
실무에서의 인덱스 관리 방법이 궁금합니다
0
21
1
Group By 절에 작성하는 컬럼 문의드립니다.
0
24
3
Issuance 테이블에 status, couponId 인덱스가 꼭 필요할까요?
2
25
1
ProductController 에서 타협하지 않는다면 어떤 형태가 되나요?
1
32
2
문제와 풀이2 1번문제
0
18
1
1번 문제 질문
0
42
2
3-13 리텐션 과제 제출합니다
0
52
2
부하 테스트 시 설정 관련 질문드립니다
1
64
2
build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)
0
61
2
실습 데이터(PostgreSQL 백업 파일) 관련하여 문의드립니다. (Hive 환경 실습)
0
43
2
sakila 실전 17번 문제
0
39
1
수강 완료한 강의 수료증 어떻게 받나요?
0
45
1
복합인덱스 설계 질문
0
85
1
app logs 데이터로 쿼리 연습
0
57
2
ArticleReadService 관련 질문
0
39
1
이진 트리 노드
0
58
1
통계정보 갱신 질문
0
88
2
PK 관련하여 궁금한 점이 있어서 질문 드립니다.
0
98
2
탐색을 한번 더 하지 않게 하는 방식 중 어댑티브 해시 방식도 맞는지 궁금 합니다.
0
88
2
컬럼 크기가 대용량인 경우 DB 버퍼 풀에 전부 올라오는지 궁금합니다
0
82
2
실습데이터 ORDERS 생성 시간 질문요...
0
126
3
MySQL 서버구조 쿼리파서 질문 있습니다 !
0
78
1
Postgresql 아키텍처 업데이트
1
98
2

