티스토리 뷰
JPA의 QueryDsl을 공부하며 DTO 설계를 다시 하던 중 문득 떠오른 생각,
select * 로 row data를 전부 가져오는 것과 특정 컬럼을 가져오는 것이 어떤 차이가 있을 것인가 생각이 들어서 우리의 칼라(구글)에 물어보았다.
위 문제는 아래 링크에서 어느정도(?) 해답을 얻을 수 있게되었다.
https://stackoverflow.com/questions/3180375/select-vs-select-column
성능의 관점
참고된 예
https://weblogs.asp.net/jongalloway/the-real-reason-select-queries-are-bad-index-coverage
- 89000개 정도의 row data가 있는 DB에서 326개 정도의 row를 가져올때
The following two queries select 326 rows from the TransactionHistoryArchive table in the AdventureWorks database (which has a total of 89K rows).
- 아래 두 쿼리를 실행(전체 조회 / 특정 컬럼 하나 조회)했을 때 발생하는 traffic은 대략 10% 차이라고 한다. (개선될 수 있지만 큰 차이는 아님)
SELECT * FROM Production.TransactionHistoryArchive WHERE ReferenceOrderID < 100 SELECT ReferenceOrderLineID FROM Production.TransactionHistoryArchive WHERE ReferenceOrderID < 100
In this case, the difference in network traffic is only 15K, roughly a 10% difference (180K vs. 165K). It's worth fixing, but not a huge difference.
결국 컬럼을 다가져오면 트래픽 차이가 더 크지 않을 텐데 그럼 Select *이 나을 것인가?
위 StackOverFlow에서 정리된 내용으로 보면 특정 컬럼들을 가져오는 경우가 여러모로 더 낫다는 의견인데, 그 중 이해가 간 내용으로는 아래 내용들이다.
- 필요한 속성에 대한 정의가 되어있지 않아 가독성이 떨어진다.
- 특정 열만 필요한 경우 전체 열을 가져올시 traffic waste가 발생한다.
- 데이터의 특정 측면(예: 반환된 열 순서)에 의존하기 시작하면 테이블이 재구성되고 새 열이 추가되거나 기존 열이 제거되면 문제가 생기기 시직한다.
결론:
Using Select * is Not the best practice -> 올바른 습관이 아님.
SELECT * 쓰지말자
'Programming & CS' 카테고리의 다른 글
[DB] InfluxDB란? 개념 및 구조 (1) | 2023.04.07 |
---|---|
[AI] Stable Diffusion 용어 (Checkpoint, Lora, Textual Inversion, Embedding, Hypernetwork, VAE) (0) | 2023.03.29 |
[Redis] Redis & Kafka 사용 예제(E-commerce Use Case) (0) | 2023.03.25 |
[컴공 지식] 자료 구조와 알고리즘 관계 (1) | 2022.08.18 |
- Total
- Today
- Yesterday
- 로드밸런서
- Hypernetwork
- discord bot
- Kubernetes
- 멀티레포
- oauth2
- vae
- spring boot
- springboot
- 모노레포
- 토이 프로젝트
- Microservice
- Embedding
- Polyrepo
- Spring cloud
- load balancing
- spring cloud config
- MLOps
- 소프트웨어 방법론
- Spring Security
- stable diffusion
- 회원 테이블
- tauri
- monorepo
- Textual Inversion
- load balance
- 디스코드 봇
- Multirepo
- 형상 관리
- 분산 처리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |