SQL DML SELECT쿼리를 작성할 때 단순히 출력만을 고려한다면 좋은 쿼리를 작성하기 어렵습니다. SELECT문을 작성하 때 출력될 컬럼명을 직접 명시하는 것과 아스타(*)로 처리하는 것에 대해서 어떤 차이가 있는지 성능, 유지보수, 보안 측면에서 설명해드리겠습니다.
목차
SELECT 작성 시 컬럼명 나열 VS 아스타 차이 ( DBMS 공통)
SELECT * FROM 테이블명
SELECT 컬럼명1, 컬럼명2 FROM 테이블명
SELECT 문을 작성할 때 위와 같이 두가지 형태로 기본적으로 하게 됩니다. 많은 초보 개발자분들이 이 부분에 대해서 크게 신경쓰지 않지만 둘의 차이는 성능, 유지보수, 보안 측면에서 고려될 수 있습니다. 단순히 테스트용 SELECT가 아닌 실제 운영되는 서비스를 개발하기 위해 사용되는 SQL문이라면 더욱 중요시 하여야 합니다.
성능
- SELECT * 쿼리는 테이블의 모든 열을 검색하기 때문에 불필요한 데이터를 반환할 수 있습니다. 이는 데이터베이스 서버에 부하를 주고, 대용량 테이블에서는 성능 저하의 원인이 될 수 있습니다.
- SELECT 컬럼명1, 컬럼명2와 같이 필요한 컬럼만 선택하는 것은 데이터베이스 서버에 더 효율적이며 빠른 응답 시간을 제공합니다.
- SELECT *를 사용할 때 인덱스의 효용성이 감소할 수 있습니다. 왜냐하면 SELECT *는 모든 열을 반환하기 때문에 데이터베이스 엔진은 테이블을 스캔하고 인덱스를 거의 활용하지 않을 수 있습니다. 필요한 컬럼만 선택하면 인덱스를 효과적으로 활용하여 더 빠른 검색 속도를 얻을 수 있습니다.
유지보수
- SELECT *은 결과 집합의 컬럼 구조를 알 수 없기 때문에 코드를 유지하거나 변경할 때 문제를 발생시킬 수 있습니다. 예를 들어, 열의 순서가 변경되거나 새로운 열이 추가될 경우
- SELECT *를 사용한 모든 코드를 수정해야 할 수 있습니다. 반면에 SELECT 컬럼명1, 컬럼명2를 사용하면 결과 집합의 구조가 명시적으로 정의되어 있으므로 코드의 가독성과 유지보수가 용이해집니다.
보안 측면
- SELECT *는 데이터베이스 테이블의 모든 열을 반환하므로, 민감한 정보가 포함된 열을 노출시킬 수 있습니다. 이는 보안 위협이 될 수 있습니다.
- 필요한 컬럼만 선택하면 민감한 정보가 노출될 위험을 줄일 수 있으며, 데이터 접근 권한을 효과적으로 관리할 수 있습니다.
개발자
- SELECT *를 사용하면 개발자가 결과 집합의 구조를 알기 어려울 수 있으며, 디버깅 및 쿼리 이해가 어려울 수 있습니다.
- 명시적으로 컬럼을 지정하는 것은 개발자가 데이터베이스 스키마와 쿼리를 이해하고 관리하기 쉽게 만듭니다.
마무리
SELECT문을 작성할 때, 간과하고 넘어갔을 부분이 나중에 생각지도 못한 오류로 나타날 수도 있고, 성능 문제를 야기할 수 있습니다. 처음부터 컬럼명을 나열해주는 습관을 들여 아주 간단한 SQL문이라도 안전하고 좋은 쿼리를 짜는 것이 개발자의 성장에도 매우 중요합니다.
SQLD 기출 변형 문제 풀이/해설 - SUM(), MIN(),MAX(), COUNT(), AVG()
[DB/ORACLE/SQLSERVER] 테이블 명 변경 / 테이블 칼럼 추가/수정/삭제/변경 하는 방법 - ALTER TABLE / RENAME
'IT경험공유 > DataBase' 카테고리의 다른 글
제48회 SQLD 합격후기 교재추천 및 공부법 정리 (1) | 2023.04.10 |
---|---|
SQLD 기출 변형 문제 풀이/해설 - SUM(), MIN(),MAX(), COUNT(), AVG() (0) | 2023.03.21 |
SQLD 48회 기출문제 복원 (0) | 2023.03.19 |
SQLD 자격증 요약정리 [ 1과목- 데이터 모델링의 이해 ] (0) | 2023.03.16 |
[DB] 데이터베이스 정규화 예시를 통한 완벽이해 (0) | 2023.03.15 |
댓글