SQL 가독성을 높이는 다섯 가지 사소한 습관
참조한 아티클 입니다.
https://datarian.io/blog/good-sql-code
SQL 가독성을 높이는 다섯 가지 사소한 습관
지독하게 읽기 힘든 SQL문을 해석해 본 적 있으신가요?
datarian.io
아티클 내용 정리 - SQL 가독성을 높이는 습관
| 1. 예약어는 대문자로 | 예약어에 하이라이팅이 안되는 경우도 있기에 예약어를 대문자로 써주면 컬럼이나 테이블 이름과 구분하기 편하다. |
| 2. 행갈이를 자주하자 | select, from, group by 등의 절이 한라인에 있게하지말고 블록을 나눠서 써주자. |
| 3. 행갈이를 더 자주하자 | 어떤 항목을 빼거나 수정하기위해 주석처리를 해야할 때가 있음. 행을 다 자주 나눠서 항목을 구분하기 쉽게 + 주석처리하기 쉽게 해주자. |
| 4. 주석을 쓰자 | 코드를 쓴 의도를 짤막하게 주석으로 남겨놓는 습관을 들이자. 코드가 왜 필요한지, 어떻게 동작하는지 남겨논다면 추후에 코드를 이해하거나 수정하는데 도움이 된다. |
| 5. Alias를 잘쓰자 | 서브쿼리, 코드 Alias를 단순히 a,b 이런식으로 남겨놓는다면 코드를 잘 이해하지 못하게 될 수 있다. 쿼리를 재사용하거나 다른 팀원들이 분석하기 편하도록 변수명을 잘 지어주자. |
※ 용어정리
예약어: 프로그래밍 언어에서 미리 사용하기로 약속한 단어로 식별자로 사용할 수 없는 단어를 뜻한다
Alias: 사용자가 명령어를 다른 이름으로 바꿔서 사용할 수 있는 쉘 내부 명령어.('별칭')
추가 아티클 개념 - SQL 쿼리 성능 최적화를 위한 튜닝 팁
https://community.heartcount.io/ko/query-optimization-tips/
SQL 쿼리 성능 최적화를 위한 튜닝 팁 6가지 (Query Optimization)
보다 효율적인 데이터 검색 및 추출을 위해 필요한 SQL 쿼리 튜닝 방법을 알려 드려요. 실무에서 더 빠르고 효과적으로 데이터를 처리할 수 있도록 하는 꿀팁 6가지에 대해 알아 보세요.
community.heartcount.io
핵심내용 정리
| 1. 좌변을 연산하지 않을 것 | 데이터를 변형하는 연산은 가급적 피하고 원본 데이터를 직접 비교하는 조건을 사용하자. 이는 인덱스 활용도를 높여 쿼리 속도를 향상시킴. |
| 2. OR대신 UNION을 사용할것. | OR 연산자 대신 UNION을 활용하면 각 조건을 독립적으로 최적화하고 인덱스를 효과적으로 사용할 수 있다. |
| 3. 필요한 Row와 Column 만 선택하여 성능 최적화하기 |
불필요한 Row와 Column을 제외하고 꼭 필요한 데이터만 조회할 것. 이는 데이터 처리량을 최소화 하여 쿼리 성능을 높인다. |
| 4. 분석 함수를 활용하여 쿼리 성능높이기 |
ROW_NUMBER(),RANK(),LEAD(),LAG() 등의 분석 함수를 적극 활용하면 복잡한 데이터 분석을 유연하고 효율적으로 수행할 수 있습니다. |
| 5. 와일드카드(%)는 끝에 작성하는 것이 더 좋다 |
LIKE 연산자와 와일드카드(%)를 사용할 때는 문자열 끝에 와일드 카드를 두는 것이 인덱스 활용에 유리하다. |
※ 용어정리
인덱스: 데이터를 찾는 데 사용되는 위치 값, 데이터를 빠르게 찾기 위해 별도의 공간에 정렬되어 저장된 자료구조
와일드카드: 임의의 문자(열)에 대응시키기 위하여 사용하는 문자
+ 모르는 개념
| UNION | ▷ 여러쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법 ▷ 중복된 값을 제거하고 보여준다. ▷ 중복된 값을 제거하는 연산이 추가로 수행되기 때문에 UNION ALL 보다 속도가 느리다 |
| UNION ALL | ▷ UNION과 동일하게 여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법 ▷ 중복된 값들을 모두 보여준다. |
예시

Join의 경우 새로운 열이 생성되지만 union의 경우 행을 차례대로 생성하여 보여줍니다.
두개의 테이블에서 데이터를 서칭할때 굉장히 유용할 것 같습니다.

특정 컬럼만 뽑아주면 요렇게 중복된 값이 제거됩니다.
추가 개념 - With 절
우리 조원들이 서브쿼리대신 with절을 쓰면 깔끔해 보인다길래 찾아봤습니다.

위에 가로 안의 with 절을 사용한 서브쿼리 입니다.
with으로 서브쿼리를 만들어준다음 다시 select를 통해 서브쿼리를 불러오는 쿼리입니다.

이건 제가 강의에서 배운 ( 서브쿼리 ) 를 이용한 것이구요
비슷하지만 with절은 뭔가 따로 지정해준다는 느낌으로 가독성이 좋은것 같습니다.
후자의 경우는 a절,b절 이렇게 추가되면 굉장히 복잡해지거든요.
마지막 느낀점
오늘 SQL 팁들을 알아봤는데 가독성을 높이고 쿼리의 성능을 높여줄 수 있다는 점에서 많이 연습해봐야겠습니다.