MS SQL Server (MSSQL)

SQL Server 인덱스(Index) 파헤치기

초심으로 2024. 8. 23. 18:15

728x90

인덱스(Index)에 대해 쉽게 알아보자!

여러분, 책을 읽을 때 "목차"를 본 적 있나요? 책의 목차를 보면 어떤 내용이 어디에 있는지 쉽게 찾을 수 있죠? 바로 "인덱스"도 그런 역할을 해요. 이번 글에서는 우리가 많이 사용하는 데이터베이스(DB)에서의 인덱스가 무엇인지, 왜 중요한지, 그리고 어떻게 사용하는지에 대해 쉽게 설명해 줄게요!


1. 인덱스란 무엇일까?

인덱스는 데이터베이스에서 특정 데이터를 빠르게 찾을 수 있도록 도와주는 도구예요. 만약 인덱스가 없으면, 데이터베이스는 필요한 정보를 찾기 위해 처음부터 끝까지 하나하나 다 살펴봐야 해요. 이건 마치 책의 목차가 없어서 원하는 내용을 찾기 위해 처음부터 끝까지 다 읽어야 하는 것과 같죠.

2. 인덱스의 종류

인덱스에는 두 가지 종류가 있어요:

2-1. 클러스터 인덱스(Clustered Index)

  • 특징: 한 테이블에 딱 하나만 만들 수 있어요.
  • 장점: 데이터를 자동으로 정렬해 줘서, 정해진 범위의 데이터를 찾을 때 아주 빨라요.
  • 예시: 우리 집 주소를 생각해보면, 도로명 주소로 정리된 목록이 클러스터 인덱스라고 할 수 있어요. 주소순으로 정렬된 리스트에서 집을 금방 찾을 수 있겠죠?

2-2. 넌클러스터 인덱스(NonClustered Index)

  • 특징: 한 테이블에 여러 개 만들 수 있어요.
  • 장점: 특정 값 하나를 찾는 데 유리해요.
  • 예시: 도서관에서 책 제목으로 찾는 것과 비슷해요. 도서관에 같은 제목을 가진 책이 여러 권 있어도, 그중 원하는 책을 정확하게 찾을 수 있죠.

3. 인덱스 사용법

3-1. 인덱스 생성하기

-- 인덱스 만들기
CREATE INDEX 인덱스이름 ON 테이블이름(정렬할컬럼이름)

3-2. 인덱스 삭제하기

-- 인덱스 삭제하기
DROP INDEX 테이블이름.인덱스이름

3-3. 인덱스 조회하기

-- 인덱스 조회하기
SP_HELPINDEX '테이블이름'

3-4. 인덱스 강제 설정하기 (고급사용자만!!)

- 인덱스 강제 설정  
SELECT column1, column2
FROM 테이블이름 WITH (INDEX (인덱스이름))
WHERE condition;

인덱스 힌트는 주로 옵티마이저가 적절한 인덱스를 선택하지 못하는 경우에만 사용하고, 정확히 이해하고 사용해야 해요.
가능하면 SQL 옵티마이저에게 인덱스 선택을 맡기는 것을 추천해요.

4. 인덱스를 만들 때 고려해야 할 점

4-1. 인덱스의 장단점

  • 장점: SELECT(검색)할 때 속도가 아주 빨라져요!
  • 단점: INSERT(추가), UPDATE(수정), DELETE(삭제)를 할 때는 속도가 느려질 수 있어요. 왜냐하면 인덱스도 함께 업데이트해야 하기 때문이죠.

4-2. 인덱스 컬럼과 NULL 값

  • 인덱스를 만들 때는 NULL 값이 들어갈 수 없는 컬럼에 만드는 것이 좋아요.

4-3. WHERE절에서 같은 형식 사용하기

  • 인덱스를 사용할 때는 같은 형식으로 비교해야 해요. 예를 들어 숫자는 숫자로, 글자는 글자로 비교해야 인덱스가 제대로 작동해요.

4-4. 복합 컬럼 인덱스

  • 여러 컬럼을 묶어서 인덱스를 만들 때는 자주 사용하는 컬럼을 먼저 넣어야 해요.
반응형

5. 인덱스가 잘 작동하지 않는 경우

인덱스가 걸려 있어도 잘 작동하지 않는 경우가 있어요. 아래 경우에 해당하는 것은 아닌지 살펴보고, 인덱스가 잘 설정될 수 있도록 해결해 주셔야 해요.

상황 설명 해결 방법
Like 검색 %문자% 형식으로 검색하면 인덱스가 작동하지 않아요. 문자% 형식으로 검색하면 인덱스가 작동해요.
NULL 검색 IS NULL 또는 IS NOT NULL로 검색할 때는 인덱스가 작동하지 않아요. 가능한 한 NULL 값을 피하고, NOT NULL 컬럼에 인덱스를 사용해요.
부정 연산자 사용 !=, <>, NOT IN, NOT EXISTS 같은 부정 연산자를 사용하면 인덱스가 작동하지 않아요. 부정 연산자를 피하고, 가능한 범위 검색을 사용해요.
형변환 사용 인덱스 컬럼에 형변환이나 함수(예: NUM + 1 = 2)를 사용하면 인덱스가 작동하지 않아요. 형변환이나 함수를 사용하지 않고 원래 값으로 비교해요.
OR 구문 사용 인덱스가 없는 컬럼과 OR 조건으로 검색하면 인덱스가 작동하지 않아요. OR 대신 UNION이나 다른 방법을 고려해보세요.
조건절 위치 조건에서 인덱스가 걸린 컬럼이 오른쪽에 있을 경우 인덱스가 작동하지 않아요. 인덱스가 걸린 컬럼을 조건의 왼쪽에 배치해요.

이 표를 참고하면 인덱스가 제대로 작동하지 않는 상황을 쉽게 이해하고, 해결 방법을 찾을 수 있어요!


이제 인덱스가 무엇인지, 왜 중요한지 조금은 알겠죠? 인덱스는 데이터베이스에서 꼭 필요한 도구예요. 책을 쉽게 찾을 수 있는 도서관의 목차처럼, 인덱스는 데이터를 빠르게 찾을 수 있게 도와줘요. 데이터베이스를 사용할 때 인덱스를 잘 활용하면 훨씬 더 효율적으로 작업할 수 있을 거예요!

다음 주제로 쿼리플랜을 확인하고, 쿼리플랜 선택에 중요한 영향을 미치는 통계관련 된 이야기를 준비해 볼게요.

반응형