SELECT *보다 열 이름을 직접 나열하는 것이 더 빠릅니다
MySQL에서 SELECT *는 테이블의 모든 열을 가져오기 때문에, 필요한 열만 명시적으로 나열하는 방식에 비해 일반적으로 더 느립니다. 따라서 SELECT 쿼리를 작성할 때는 와일드카드(*) 대신 실제로 필요한 열 이름을 직접 나열하는 것이 좋은 습관입니다.
간단한 예제를 통해 이를 확인해 보겠습니다.
1. 테이블 생성
mysql> create table DemoTable(
Id int,
Name varchar(20),
Age int,
ZipCode varchar(20),
CountryName varchar(20)
);
Query OK, 0 rows affected (0.82 sec)
2. 데이터 삽입
INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(101,'Chris',23,'0909332','US');
Query OK, 1 row affected (0.48 sec)
mysql> insert into DemoTable values(102,'Bob',24,'8747443','AUS');
Query OK, 1 row affected (0.50 sec)
mysql> insert into DemoTable values(103,'Adam',21,'9988833','UK');
Query OK, 1 row affected (0.11 sec)
3. SELECT *로 전체 조회
먼저 SELECT * 문을 사용해 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+-------+------+---------+-------------+
| Id | Name | Age | ZipCode | CountryName |
+------+-------+------+---------+-------------+
| 101 | Chris | 23 | 0909332 | US |
| 102 | Bob | 24 | 8747443 | AUS |
| 103 | Adam | 21 | 9988833 | UK |
+------+-------+------+---------+-------------+
3 rows in set (0.00 sec)
4. 열 이름을 직접 나열하여 조회
이번에는 더 빠른 방식으로 알려진 방법대로, SELECT 문에 모든 열 이름을 직접 나열하여 조회해 보겠습니다.
mysql> select Id,Name,Age,ZipCode,CountryName from DemoTable;
결과는 동일하게 출력됩니다.
+------+-------+------+---------+-------------+
| Id | Name | Age | ZipCode | CountryName |
+------+-------+------+---------+-------------+
| 101 | Chris | 23 | 0909332 | US |
| 102 | Bob | 24 | 8747443 | AUS |
| 103 | Adam | 21 | 9988833 | UK |
+------+-------+------+---------+-------------+
3 rows in set (0.00 sec)
정리: 왜 열 이름을 나열해야 할까?
두 쿼리 모두 같은 결과를 반환하지만, 열 이름을 직접 나열하는 방식이 권장되는 이유는 다음과 같습니다.
성능 최적화: SELECT *는 불필요한 열까지 모두 읽어오므로, 특히 열 수가 많은 대형 테이블에서 네트워크 전송량과 메모리 사용량이 증가해 성능이 저하될 수 있습니다.
유지보수성: 테이블 구조가 변경되어도 명시적으로 작성된 쿼리는 의도한 결과를 그대로 유지합니다.
명확성: 어떤 데이터를 가져오는지 코드만으로도 파악할 수 있어 가독성이 향상됩니다.
따라서 실무에서는 SELECT * 대신 필요한 열만 선택적으로 조회하는 습관을 들이는 것이 바람직합니다.