티스토리 뷰

JPA의 QueryDsl을 공부하며 DTO 설계를 다시 하던 중 문득 떠오른 생각,

 

select * 로 row data를 전부 가져오는 것과 특정 컬럼을 가져오는 것이 어떤 차이가 있을 것인가 생각이 들어서 우리의 칼라(구글)에 물어보았다.

 

위 문제는 아래 링크에서 어느정도(?) 해답을 얻을 수 있게되었다.

https://stackoverflow.com/questions/65512/which-is-faster-best-select-or-select-column1-colum2-column3-etc

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에서 정리된 내용으로 보면 특정 컬럼들을 가져오는 경우가 여러모로 더 낫다는 의견인데, 그 중 이해가 간 내용으로는 아래 내용들이다.

  1. 필요한 속성에 대한 정의가 되어있지 않아 가독성이 떨어진다.
  2. 특정 열만 필요한 경우 전체 열을 가져올시 traffic waste가 발생한다.
  3. 데이터의 특정 측면(예: 반환된 열 순서)에 의존하기 시작하면 테이블이 재구성되고 새 열이 추가되거나 기존 열이 제거되면 문제가 생기기 시직한다.

결론:

Using Select * is Not the best practice -> 올바른 습관이 아님.

SELECT * 쓰지말자

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함