개요
실무에서 모든 이론을 천천히 공부해서 쿼리를 튜닝하기엔 너무 늦다. 간단한 규칙을 지키며 최대한 튜닝해보자.
해야되는 것
PLAN 보기
PLAN 보기는 모든 튜닝 작업 중 가장 선행해서 이루어져야 할 작업이다. 이는 의사로 치면 치료 전에 진단을 먼저 해보는 것과 비슷하다.
인덱스
인덱싱은 쿼리의 빠른 실행에서 가장 중요한 역할을 한다. DB 는 순서가 있는 데이터를 검색할 때 가장 빠르다.
순서가 있는 데이터는 Binary Search 가 가능하고, Binary Search 가 가능한 순간 O(N)
의 복잡도는 O(log N)
으로 줄어든다.
서비스에서 많이 이용되는 검색조건이 있다면, 반드시 인덱스를 걸어주도록 하자.
조건문 유심히 보기
쿼리가 느린 이유는 보통 SELECT
에서 어떤 것을 선택하냐가 아닌 FROM
과 WHERE
에서 어떤 것을 가져오냐이다.
쿼리 중 같은 결과를 가져오더라도 FROM
과 WHERE
를 통해 미리 필터링되어야 할 데이터를 늦게 필터링함으로써 수행시간이 증가하는 경우를 조심해야 한다.
필터링은 빠르면 빠를수록 좋다. 보통 정규화 잘 된 검색 쿼리에는 JOIN
이 들어가게 되는데 이 JOIN
은 결국 집합에서 합집합, 교집합 등을 구하는 것과 같다.
집합 연산을 할 때 원소의 수가 너무 많다면 당연히 컴퓨터도 연산하는데 오래 걸릴 것이고, 재수가 없다면 인덱싱이 제대로 되지 않은 원소끼리의 교집합을 구할 때 많은 비효율이 발생할 수 있다.
조인은 가장 나중에 하기
조인은 집합 연산을 하게 되는 구간이다. 이 구간은 조인 전에 필터링 될 수 있는 부분은 모조리 필터링 한 후에 진행하는 것이 당연히 이득이다.
MSSQL 의 경우 임시테이블 적극 활용하기
임시 테이블은 조인이나 서브쿼리로 복잡하게 이루어져야 하는 작업들을 간소화해줘서 가독성에도 도움을 주며, 다양한 버그로 인해 인덱싱을 타지 않는 경우도 예방해준다.
하면 안되는 것
문자열을 조합해서 만드는 동적쿼리는 항상 피하자.
누군가는 동적쿼리를 위해 어쩔 수 없다고 이야기할 수도 있지만, 나중에 수정하기 매우 어렵기 때문에 할 거면 굉장히 깔끔하게 파트를 잘 나누어주어야 한다.
'데이터베이스 > MSSQL' 카테고리의 다른 글
SQL SERVER (MSSQL) 날짜와 날짜 사이 모든 날짜 구하기 (0) | 2022.06.21 |
---|---|
MSSQL 에서 1~10000 까지의 숫자 반복하여 출력하기 (0) | 2022.06.01 |
SQL Server 에서 인덱싱을 제대로 타지 못하는 다양한 이유 (0) | 2022.06.01 |
MSSQL (SQL Server) 에서 테이블의 주석 확인하는 방법 (0) | 2022.06.01 |
MSSQL (SQL Server) 에서 느린 쿼리 (슬로우 쿼리) 확인하는 방법 (0) | 2022.06.01 |