이런경우 애스터리스크(*)를 써도 괜찮나요? 0 7 3,976

by 아플라 [SQL Query] SQL [2019.05.13 16:24:08]


SELECT INV.*
FROM (
 SELECT A, B, C, D
 FROM TABLE
) INV

위 쿼리문 처럼 서브쿼리에서 컬럼을 특정해놓은 경우에는 애스터리스크를 써서 컬럼명을 가져오는것도 속도와 상관없는지 궁금합니다.
 

by 르매 [2019.05.13 16:55:45]

보통 * 를 쓰지 않도록 가이드하는건.. 사용하지 않는 컬럼의 데이터를 읽는 디스크 I/O & 전송하는데 사용하는 네트워크 I/O 의 낭비를 막기 위한거니까요.

예제와 같은 경우라면.. 상관 없는게 맞다고 보입니다.


by 아플라 [2019.05.13 22:36:04]

답변 감사합니다! 
가독성좋은 SQL 작성측면에서는 애스터리스크와 컬럼명나열중 어떤것이 더 괜찮을까요 ?


by jkson [2019.05.14 08:20:13]

쿼리가 변경되어 조인 테이블이 늘어나든지 하는 경우에 불필요한 컬럼을 전송하게 될 가능성이 있으니 되도록 사용할 컬럼을 명시적으로 나열하는 게 좋지 않을까요?^^ 참고로 테이블의 경우에는 블록단위로 읽게 되므로 컬럼을 명시하더라도 대부분 한 row 데이터를 다 읽게 되지만(disk) *를 사용하여 모든 컬럼을 나열하게 되면 네트워크 데이터 전송량이 늘어납니다.


by 르매 [2019.05.14 11:09:34]

@아플라
컬럼명을 명시하는 쪽을 선호합니다.
* 를 사용하는 구문은 주로 COUNT(*), EXISTS (SELECT * ~) 정도입니다.


by 마농 [2019.05.13 17:00:36]

네. 속도와 상관은 없습니다.
하지만, 굳이 인라인뷰를 쓸 이유가 없어 보이는 쿼리네요.


by 아플라 [2019.05.13 22:38:54]

답변감사합니다!
실제 코드의 일부분만 가져와서 예시를 간략화하다보니 그런것같습니다..ㅎㅎ
실제로는 인라인뷰로 다중 조인이 발생하는쿼리였습니다.


by 마농 [2019.05.14 09:34:49]

SQL 의 가독성을 높이기 위한 제 개인적인 SQL 작성 규칙 입니다.
 - 적당한 줄바꿈(엔터)과 줄맞춤(들여쓰기)이 필요합니다.
 - 항목별로 줄바꿈 하고, 컴마는 앞쪽에 둡니다.
 - SELECT, FROM, WHERE 뒤쪽 공백에 줄맞춤 합니다.
 - 명령어(대문자)와 명칭(소문자)의 대소문자를 구별합니다.
 - 알리아스는 약어를 쓰는 것 보다는 그냥 a, b, c 쓰는게 더 깔끔해 보이네요.

SELECT c.*
  FROM (SELECT a.a
             , a.b
             , b.c
             , b.d
          FROM table1 a
             , table2 b
         WHERE a.id  = b.id
           AND a.col = 1
        ) c
 WHERE ROWNUM = 1
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입