반응형
Index는 database의 성능 향상을 가져올 수도 있지만 저하를 발생할 수 있습니다. 그래서 오늘은 index의 장점, 단점에 관해서 설명하겠습니다.
MSSQL Index 사용 시 고려 사항
- MSSQL에서 index를 효과적으로 사용하면 데이터베이스 성능을 크게 향상하게 시킬 수 있지만, 과도한 사용은 역효과를 가져올 수 있으므로 신중하게 계획하고 관리해야 합니다.
- index를 활용하여 성능을 최적화하는 방법을 깊이 고민하는 것이 중요합니다.
- 데이터베이스 설계와 운영의 핵심적인 부분을 차지하는 만큼, MSSQL Index에 대한 충분한 이해가 필요합니다.
- MSSQL INDEX는 테이블 크기와 쿼리 패턴에 따라 효과가 다르게 나타날 수 있습니다.
- MSSQL INDEX 설계: 너무 많은 index를 생성하지 말고, 주요 검색 조건에 맞는 index를 설계하세요.
- 주기적인 유지 보수: MSSQL INDEX의 단편화(Fragmentation)를 방지하기 위해 재구성(Rebuild) 또는 다시 정리(Reorganize)를 수행하세요.
- 효율적인 쿼리 작성: 쿼리를 작성할 때 MSSQL INDEX를 최대한 활용할 수 있도록 설계하세요.
INDEX의 장점
- 검색 속도 향상: MSSQL INDEX 사용하면 테이블에서 데이터를 검색할 때 전체 데이터를 스캔하지 않아도 됩니다.
index는 특정 열의 값을 기준으로 데이터를 빠르게 검색할 수 있도록 돕습니다.
primary key를 기초로 하여 테이블에서 검색과 정렬 속도를 향상하게 시킬 수 있습니다. - 다양한 쿼리 성능 개선: 조인(Join), 서브쿼리(Subquery), 집계(Aggregation) 작업에서도 성능을 향상시킬 수 있습니다.
- 정렬 및 필터링 성능 향상: index를 통해 정렬(Order By) 및 필터링(Where 조건문) 작업을 더욱 효율적으로 처리할 수 있습니다.
- 데이터 무결성 유지: index는 특정 열에 대해 고유성(Unique)을 강제할 수 있습니다.
이를 통해 중복 데이터를 방지하고 데이터 무결성을 유지하는 데 도움을 줍니다.
테이블의 primary key는 자동으로 index 됩니다.
INDEX의 단점
- 저장 공간 증가: index를 생성하면 추가적인 데이터 구조를 저장해야 하므로 디스크 공간이 더 필요합니다.
특히 비클러스터형 index가 여러 개일 경우, 저장 공간의 요구량이 더 커질 수 있습니다.
즉, index도 저장 공간이 필요하므로 disk 저장 공간을 차지합니다. - 데이터 수정 시 성능 저하: 테이블에 삽입, 업데이트, 삭제 작업을 수행할 때마다 해당 index도 업데이트되어야 하므로 성능이 저하될 수 있습니다.
index가 많을수록 이러한 성능 저하는 더 커질 수 있습니다.
대량의 Data일 때 index 변경하기 쉽지 않습니다. 처음 생성할 때 주의해서 생성해야 합니다. - 관리 복잡성 증가: index를 적절히 설계하고 관리하지 않으면 성능이 오히려 저하될 수 있습니다.
잘못된 index 설정은 쿼리 실행 계획을 비효율적으로 만들 수 있습니다.
INDEX는 주기적으로 관리가 필요 합니다, 즉 비용이 발생합니다.
데이터 변경 작업이 자주 일어날 때 index를 재작성해야 할 필요가 있기에 성능에 영향을 끼칠 수 있다. - 과도한 index 생성의 역효과: 테이블에 너무 많은 index를 생성하면 데이터베이스 서버의 CPU와 메모리 자원을 많이 소모하게 되어, 전체 성능에 부정적인 영향을 미칠 수 있습니다.
INSERT, DELETE, UPDATE 빈번하게 발생하는 테이블은 미리 성능 테스트가 필요합니다.
INDEX를 추가하면 query 속도가 빨라지지만, 데이터 행을 추가하는 속도는 느려지게 되어 여러 사용자가 사용하는 경우 레코드 잠금 문제가 발생할 수 있습니다.
INDEX를 사용하면 좋은 경우
- INDEX를 효율적으로 사용하기 위해선 데이터의 range가 넓고 중복이 적을수록, 조회가 많거나 정렬된 상태가 유용한 칼럼에 사용하는 것이 좋습니다.
- 규모가 큰 테이블에 Index 생성하면 좋습니다.
- 삽입(INSERT), 수정(UPDATE), 삭제(DELETE) 작업이 자주 발생하지 않는 칼럼에 Index 생성하면 좋습니다.
- WHERE나 ORDER BY, JOIN 등이 자주 사용되는 칼럼은 Index 생성하면 좋습니다.
- 데이터의 중복도 낮은 칼럼은 Index 생성하면 좋습니다.
반응형