최종 수정: 2025.06.17
효율적 쿼리
■ 서브 쿼리와 조인
서브 쿼리(subquery)는 다른 SQL 문이 포함된 SQL 문을 의미하며, 조인(join)은 2개의 테이블을 하나로 합치는 것을 의미한다. 둘은 엄연히 별개의 개념이지만, 때로는 같은 문제 상황을 해결하기 때문에 비교해 학습하면 좋다.
서브 쿼리
다양한 테이블을 세밀하게 다루는 SQL 문을 작성하기 위해서는 서브 쿼리를 이용할 수 있다. 서브 쿼리의 일반적인 의미는 '내부에 다른 SQL 문이 포함되어 있는 SQL 문'이다. 서브 쿼리는 또 다른 서브 쿼리를 포함할 수도 있다.
조인
서브 쿼리를 통해 복잡한 상황을 다루는 세밀한 SQL 문을 작성할 수 있다고는 하지만, 자칫 SQL 문이 너무 복잡해질 수 있다. 여러 테이블을 기반으로 SQL 문을 작성할 때 조인(join)을 적용할 수도 있다.
가장 자주 언급되는 대표적인 조인은 크게 INNER 조인(내부 조인)과 OUTER 조인(외부 조인)으로 나눌 수 있다. OUTER 조인은 다시 LEFT OUTER 조인과 RIGHT OUTER 조인, FULL OUTER 조인(완전 외부 조인)으로 구분된다.
■ 뷰(View)
SELECT 문의 결과로 만들어진 가상의 테이블이다. SELECT 문의 결과를 뷰로 생성한 뒤, 해당 뷰에 다양한 SQL 문을 실행해 볼 수 있다. 주로 테이블에 대한 SQL 문을 단순화하기 위해 사용된다.
CREATE VIEW 뷰_이름 AS SELECT문;
뷰는 쿼리의 단순화, 재사용성을 높이기 위해 많이 사용된다. 여러 테이블을 조인하거나 복잡한 조건식을 사용한 SQL 문을 하나의 뷰로 만들어 두면, 이후 복잡한 SQL 문을 반복적으로 작성하는 대신에 보다 단순하게 동일한 결과를 얻을 수 있다. 또한, 특정 사용자에게 테이블의 특정 데이터만 보여주고자 할 때도 사용할 수 있다.
뷰를 사용할 때 유의할 점은 VIEW에 대한 조회(SELECT)에는 제한이 없지만, 삽입과 수정, 삭제 등이 불가능할 수도 있다는 점이다. 특히 여러 테이블을 SELECT한 결과로 만들어진 뷰의 경우, 삽입/수정/삭제 연산이 제약 조건을 어기기 쉽ㅂ기 때문이다. 따라서 뷰는 조화를 목적으로 사용되는 경우가 많다.
■ 인덱스(Index)
인덱스는 RDBMS의 성능을 향상시키는 가장 대중적인 방법이다. ㅈ거재적소에 활용하면 성능상의 이점을 얻을 수 있다. 하지만 남용하면 오히려 성능에 악영향을 끼치기도 한다. 인덱스는 검색 속도 향상을 목적으로 만드는 하나 이상의 테이블 필드에 대한 자료구조이다.
NoSQL에서는 인덱스의 종류를 크게 클러스터형 인덱스와 세컨더리 인덱스로 구분한다.
- 클러스터형 인덱스(clustered index): 테이블당 하나씩 만들 수 있는 인덱스로, 기본 키에 해당한다.
- 세컨더리 인덱스(secondary index): 논클러스터형 인덱스라고도 부르며, 테이블당 여러 개가 존재할 수 있지만 클러스터형 인덱스를 활용한 검색보다 일반적으로 느리다.
인덱스로 사용되는 자료구조
대표적인 자료구조는 해시 테이블과 B 트리이다.
인덱스의 생성 이전에 고려해야 할 기회비용이 있다. 우선 인덱스의 저장 공간과 생성 시간을 고려해야 한다. 엄연히 여러 데이터를 포함하는 자료구조이므로 인덱스가 차지하는 공간이나 생성 시간이 점점 커질 수 있기 때문이다. 또한, 조회(SELECT) 성능은 향상시킬 수 있지만 그 외의 작업에 대해서는 성능 향상을 가져오지 않는다. 오히려 성능을 떨어뜨리는 원인이 되기도 한다. 인덱스를 유지하고 갱신하는 추가적인 자원오가 연산이 필요하기 때문이다.
또한, 데이터가 충분히 많지 않은 상황에서는 굳이 인덱스를 사용할 필요가 없다. 즉, 인덱스는 데이터가 충분히 많은 테이블, 조회가 빈번히 이루어지는 테이블 필드에 만들어 활용하는 것이 좋다. 일반적으로는 테이블당 3개 이하의 인덱스를 권한다. 또한 중복되는 데이터가 많은 필드에 대해 인덱스를 생성하는 것은 그렇지 않은 필드에 대해 인덱스를 사용하는 것이 비해 인덱스의 효능을 떨어뜨린다. 중복되는 데이터가 많으면 인덱스를 하용하든, 사용하지 않든 테이블의 수많은 레코드를 탐색해 보아야 한다는 점은 크게 달라지지 않기 때문이다.
참고 도서
이것이 컴퓨터 과학이다.
댓글