[책 공부] SQL 코딩의 기술
책 소개

SQL을 공부하고 싶다면 해당 책을 추천합니다. 예시들을 보여주면서 어떤 쿼리가 안좋은건지 어떻게 개선할 수 있는지를 보여줍니다.
기본키
- 테이블당 반드시 하나의 기본키가 있어야 한다.
- 복합 기본키는 최대한 사용하지 말아야 한다.
인덱스는 신중히
이 책에서도 인덱스를 활용하는 것이 중요하다고 말하고 있다. 인덱스를 활용함으로써 성능을 크게 높일 수 있지만 좋다고 남발하면 갱신 속도를 늦추며, 용량을 크게 차지할 수 있다. 즉, 인덱스를 생성하기 전에 해당 테이블에서 정말 필요한 용도인지를 신중히 판별한 후에 사용한다. 또한 인덱스는 테이블이 클 때만 사용하는 것이 좋다.
- 인덱스를 단순 필터링 이상의 목적으로 사용하자.
트리거
트리거는 갱신 작업을 자동으로 실행하는 기능을 제공한다. 다만, 트리거는 이식성과 가시성이 좋지 않으며 개발자 입장에서 어떤 기능을 수행해서 이러한 결과가 나왔는지 디버깅이 어렵다. 또한 성능 측면에서도 좋지 않을 수 있다. (실행계획 불가)
핵심정리
NOT IN보다는NOT EXISTS를 사용하는 것이 더 빠르다.- datetime 값은 반올림 오류가 있음. BETWEEN 대신 >=, <= 연산자를 사용한다.
- LIKE 연산자를 사용할 때 % 문자는 검색 문자열 끝에 붙여야 인덱스를 사용할 수 있다. (ex. ‘something%’)
- SQL에서 차감 연산을 할 때는 OUTER JOIN을 사용한다.
- 집계 표현식에 조건을 주려면 HAVING절을 사용한다.
- ‘주’테이블을 셀프 조인할 때는 LEFT JOIN을 사용한다.
- ON절에 있는 컬럼을 인덱스로 만들면 성능을 높일 수 있다.
- 널 값이 있는 로우를 포함해 모든 로우의 개수를 세려면 COUNT(*)를 사용한다.
- 중복을 제거하려면 DISTINCT를 사용한다.
- 공통 테이블 표현식(CTE)으로 동일한 서브쿼리를 한 번 이상 사용하는 복잡한 쿼리를 간단하게 만들 수 있다.
- 서브쿼리 대신 조인을 사용해 더 효율적인 쿼리를 작성할 수 있다.
Comments