반응형
Jake Seo
제이크서 위키 블로그
Jake Seo
전체 방문자
오늘
어제
  • 분류 전체보기 (715)
    • 일상, 일기 (0)
    • 백준 문제풀이 (1)
    • 릿코드 문제풀이 (2)
    • 알고리즘 이론 (10)
      • 기본 이론 (2)
      • 배열과 문자열 (8)
    • 데이터베이스 (15)
      • Planet Scale (1)
      • MSSQL (9)
      • 디비 기본 개념 (1)
      • SQLite 직접 만들어보기 (4)
    • 보안 (7)
    • 설계 (1)
    • 네트워크 (17)
      • HTTP (9)
      • OSI Layers (5)
    • 회고 (31)
      • 연간 회고 (2)
      • 주간 회고 (29)
    • 인프라 (52)
      • 도커 (12)
      • AWS (9)
      • 용어 (21)
      • 웹 성능 (1)
      • 대규모 서비스를 지탱하는 기술 (9)
    • 깃 (7)
    • 빌드 도구 (7)
      • 메이븐 (6)
      • 그레이들 (0)
    • Java (135)
      • 이펙티브 자바 (73)
      • 자바 API (4)
      • 자바 잡지식 (30)
      • 자바 디자인 패턴 (21)
      • 톰캣 (Tomcat) (7)
    • 프레임워크 (64)
      • next.js (14)
      • 스프링 프레임워크 (28)
      • 토비의 스프링 (6)
      • 스프링 부트 (3)
      • JPA (Java Persistence API) (5)
      • Nest.js (8)
    • 프론트엔드 (48)
      • 다크모드 (1)
      • 노드 패키지 관리 매니저 (3)
      • CSS (19)
      • Web API (11)
      • tailwind-css (1)
      • React (5)
      • React 새 공식문서 요약 (1)
      • HTML (Markup Language) (5)
    • 자바스크립트 (108)
      • 모던 자바스크립트 (31)
      • 개념 (31)
      • 정규표현식 (5)
      • 코드 스니펫 (1)
      • 라이브러리 (6)
      • 인터뷰 (24)
      • 웹개발자를 위한 자바스크립트의 모든 것 (6)
      • 팁 (2)
    • Typescript (49)
    • 리눅스와 유닉스 (10)
    • Computer Science (1)
      • Compiler (1)
    • IDE (3)
      • VSCODE (1)
      • IntelliJ (2)
    • 세미나 & 컨퍼런스 (1)
    • 용어 (개발용어) (16)
      • 함수형 프로그래밍 용어들 (1)
    • ORM (2)
      • Prisma (2)
    • NODEJS (2)
    • cypress (1)
    • 리액트 네이티브 (React Native) (31)
    • 러스트 (Rust) (15)
    • 코틀린 (Kotlin) (4)
      • 자바에서 코틀린으로 (4)
    • 정규표현식 (3)
    • 구글 애널리틱스 (GA) (1)
    • SEO (2)
    • UML (2)
    • 맛탐험 (2)
    • 리팩토링 (1)
    • 서평 (2)
    • 소프트웨어 공학 (18)
      • 테스팅 (16)
      • 개발 프로세스 (1)
    • 교육학 (1)
    • 삶의 지혜, 통찰 (1)
    • Chat GPT (2)
    • 쉘스크립트 (1)
    • 컴파일 (2)
    • Dart (12)
    • 코드팩토리의 플러터 프로그래밍 (4)
    • 플러터 (17)
    • 안드로이드 스튜디오 (1)
    • 윈도우즈 (1)
    • 잡다한 백엔드 지식 (1)
    • 디자인 패턴 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • pnpm
  • 작업기억공간
  • Java
  • 토비의 스프링
  • prerendering
  • item9
  • 자바스크립트 면접
  • 디자인패턴
  • 싱글톤
  • 자바
  • 자바 검증
  • 싱글톤 패턴
  • 빈 검증
  • 싱글턴
  • 메이븐 라이프사이클
  • 팩터리 메서드 패턴
  • NEXT JS
  • rust
  • 이펙티브 자바
  • 알고리즘
  • 슬로우 쿼리
  • 객체복사
  • Javadoc 자바독 자바주석 주석 Comment
  • 자바 디자인패턴
  • 메이븐 페이즈
  • 추상 팩터리 패턴
  • 자바스크립트
  • 자료구조
  • 메이븐 골
  • 자바스크립트 인터뷰
  • serverless computing
  • 참조 해제
  • 스프링 검증
  • 외래키 제약조건
  • bean Validation
  • 이펙티브 자바 item9
  • item7
  • try-with-resources
  • Pre-rendering
  • 러스트
  • 이펙티브자바
  • 플라이웨이트패턴
  • next js app
  • MSSQL
  • Next.js
  • 서버리스 컴퓨팅
  • item8
  • 도커공식문서
  • 프로그래머의 뇌
  • 느린 쿼리

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Jake Seo

제이크서 위키 블로그

데이터베이스/MSSQL

MSSQL 실무 쿼리 튜닝법

2022. 6. 1. 16:15

개요

실무에서 모든 이론을 천천히 공부해서 쿼리를 튜닝하기엔 너무 늦다. 간단한 규칙을 지키며 최대한 튜닝해보자.

해야되는 것

PLAN 보기

PLAN 보기는 모든 튜닝 작업 중 가장 선행해서 이루어져야 할 작업이다. 이는 의사로 치면 치료 전에 진단을 먼저 해보는 것과 비슷하다.

인덱스

인덱싱은 쿼리의 빠른 실행에서 가장 중요한 역할을 한다. DB 는 순서가 있는 데이터를 검색할 때 가장 빠르다.

순서가 있는 데이터는 Binary Search 가 가능하고, Binary Search 가 가능한 순간 O(N) 의 복잡도는 O(log N) 으로 줄어든다.

서비스에서 많이 이용되는 검색조건이 있다면, 반드시 인덱스를 걸어주도록 하자.

조건문 유심히 보기

쿼리가 느린 이유는 보통 SELECT 에서 어떤 것을 선택하냐가 아닌 FROM 과 WHERE 에서 어떤 것을 가져오냐이다.

쿼리 중 같은 결과를 가져오더라도 FROM 과 WHERE 를 통해 미리 필터링되어야 할 데이터를 늦게 필터링함으로써 수행시간이 증가하는 경우를 조심해야 한다.

필터링은 빠르면 빠를수록 좋다. 보통 정규화 잘 된 검색 쿼리에는 JOIN 이 들어가게 되는데 이 JOIN 은 결국 집합에서 합집합, 교집합 등을 구하는 것과 같다.

집합 연산을 할 때 원소의 수가 너무 많다면 당연히 컴퓨터도 연산하는데 오래 걸릴 것이고, 재수가 없다면 인덱싱이 제대로 되지 않은 원소끼리의 교집합을 구할 때 많은 비효율이 발생할 수 있다.

조인은 가장 나중에 하기

조인은 집합 연산을 하게 되는 구간이다. 이 구간은 조인 전에 필터링 될 수 있는 부분은 모조리 필터링 한 후에 진행하는 것이 당연히 이득이다.

MSSQL 의 경우 임시테이블 적극 활용하기

임시 테이블은 조인이나 서브쿼리로 복잡하게 이루어져야 하는 작업들을 간소화해줘서 가독성에도 도움을 주며, 다양한 버그로 인해 인덱싱을 타지 않는 경우도 예방해준다.

하면 안되는 것

문자열을 조합해서 만드는 동적쿼리는 항상 피하자.

누군가는 동적쿼리를 위해 어쩔 수 없다고 이야기할 수도 있지만, 나중에 수정하기 매우 어렵기 때문에 할 거면 굉장히 깔끔하게 파트를 잘 나누어주어야 한다.

SQL Server 동적쿼리 관련 아티클

반응형
저작자표시 비영리

'데이터베이스 > 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
    '데이터베이스/MSSQL' 카테고리의 다른 글
    • SQL SERVER (MSSQL) 날짜와 날짜 사이 모든 날짜 구하기
    • MSSQL 에서 1~10000 까지의 숫자 반복하여 출력하기
    • SQL Server 에서 인덱싱을 제대로 타지 못하는 다양한 이유
    • MSSQL (SQL Server) 에서 테이블의 주석 확인하는 방법
    Jake Seo
    Jake Seo
    ✔ 잘 보셨다면 광고 한번 클릭해주시면 큰 힘이 됩니다. ✔ 댓글로 틀린 부분을 지적해주시면 기분 나빠하지 않고 수정합니다. ✔ 많은 퇴고를 거친 글이 좋은 글이 된다고 생각합니다. ✔ 간결하고 명료하게 사람들을 이해 시키는 것을 목표로 합니다.

    티스토리툴바