핵심 메시지

같은 행을 조회해도, 어떤 열을 꺼내느냐가 결과의 폭과 실행 부담을 바꿉니다.

SELECT * 는 편하게 시작하기 좋지만 모든 컬럼을 함께 끌고 옵니다. 운영 코드에서는 실제로 쓰는 컬럼만 적어 두는 편이 더 가볍고 의도도 분명합니다.

공통 출발점: users 한 행 행 수는 같음
id name email address last_login

차이는 FROM이 아니라 SELECT 절에서 생깁니다. 어떤 컬럼을 통과시키는지에 따라 결과 집합의 폭과 이후 처리 비용이 달라집니다.

전체 컬럼을 그대로 요청 빠르기보다 편의 우선
SELECT * FROM users;
결과에 포함되는 열
id name email address last_login

화면이나 API가 쓰지 않는 값도 함께 전달됩니다.

넓은 행을 계속 읽게 됩니다.

컬럼이 많거나 큰 텍스트가 섞여 있으면 불필요한 I/O와 전송량이 커질 수 있습니다.

조회 의도가 코드에서 흐려집니다.

무슨 컬럼에 의존하는지 드러나지 않아, 스키마 변경 영향도 파악이 어려워집니다.

필요한 컬럼만 명시 운영 코드 기본값
SELECT id, name FROM users;
결과에 포함되는 열
id name email · address · last_login 제외

실제로 쓰는 데이터만 가져오므로 결과 집합이 더 가볍고 예측 가능해집니다.

읽는 범위를 줄이기 쉽습니다.

불필요한 컬럼을 제외해 네트워크 전송과 후속 처리 비용을 함께 줄일 수 있습니다.

인덱스만으로 끝날 가능성도 커집니다.

요청한 컬럼이 단순할수록 테이블 본문 접근 없이 처리할 여지가 생깁니다.

실무 판단

탐색·디버깅·아주 작은 테이블 확인처럼 잠깐 쓰는 쿼리에서는 SELECT * 가 편할 수 있습니다. 하지만 애플리케이션 코드에 들어가는 조회라면, 필요한 컬럼을 명시해 두는 쪽이 성능과 유지보수 모두에서 더 안전합니다.