인덱스(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이나 다른 방법을 고려해보세요. |
조건절 위치 | 조건에서 인덱스가 걸린 컬럼이 오른쪽에 있을 경우 인덱스가 작동하지 않아요. | 인덱스가 걸린 컬럼을 조건의 왼쪽에 배치해요. |
이 표를 참고하면 인덱스가 제대로 작동하지 않는 상황을 쉽게 이해하고, 해결 방법을 찾을 수 있어요!
이제 인덱스가 무엇인지, 왜 중요한지 조금은 알겠죠? 인덱스는 데이터베이스에서 꼭 필요한 도구예요. 책을 쉽게 찾을 수 있는 도서관의 목차처럼, 인덱스는 데이터를 빠르게 찾을 수 있게 도와줘요. 데이터베이스를 사용할 때 인덱스를 잘 활용하면 훨씬 더 효율적으로 작업할 수 있을 거예요!
다음 주제로 쿼리플랜을 확인하고, 쿼리플랜 선택에 중요한 영향을 미치는 통계관련 된 이야기를 준비해 볼게요.
'MS SQL Server (MSSQL)' 카테고리의 다른 글
만능 조회 쿼리 문제와 그 해결 방법 (3) | 2024.09.05 |
---|---|
SQL Server Search Argument Violation (SARG) 이해하기 (4) | 2024.09.04 |
SQL Server 날짜 시간 저장 방법 총정리 (+예시 포함) (85) | 2024.07.25 |
SQL Server 'LIKE' 키워드 기능 5가지 (1) | 2024.07.19 |
순위 함수: ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE() 비교 (예제포함) (3) | 2024.07.18 |