인덱스: 두 판 사이의 차이
(CS 용어 정리 - 인덱스 추가) |
(Gemini 벌크 업로더로 자동 업로드) |
||
1번째 줄: | 1번째 줄: | ||
== 인덱스 == | == 🔑 인덱스 (Index) == | ||
데이터베이스의 '''인덱스'''는 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 책의 맨 뒤에 있는 '찾아보기(색인)'와 같은 역할을 합니다. 특정 내용을 찾기 위해 책의 모든 페이지를 다 뒤지는 대신, 찾아보기를 통해 원하는 내용이 있는 페이지를 바로 찾을 수 있듯이, 인덱스는 데이터베이스가 특정 데이터를 빠르게 찾을 수 있도록 도와줍니다. | |||
---- | |||
=== | === 🤔 인덱스는 왜 필요한가? === | ||
인덱스가 없는 테이블에서 특정 데이터를 찾으려면, 데이터베이스는 테이블의 모든 행을 처음부터 끝까지 순차적으로 검색해야 합니다. 이를 '''풀 테이블 스캔(Full Table Scan)'''이라고 합니다. 데이터의 양이 적을 때는 문제가 없지만, 수백만, 수천만 건의 데이터가 있는 테이블에서는 풀 테이블 스캔이 매우 느리고 시스템에 큰 부하를 줍니다. | |||
인덱스는 데이터와 해당 데이터의 위치(주소)를 키-값 쌍으로 미리 정렬하여 저장해 둠으로써, 풀 테이블 스캔을 피하고 데이터 검색 속도를 획기적으로 향상시킵니다. | |||
---- | |||
=== ⚙️ 인덱스의 동작과 자료구조 === | |||
대부분의 RDBMS는 인덱스를 구현하기 위해 '''B-Tree(Balanced Tree)''' 자료구조를 사용합니다. B-Tree는 항상 균형을 유지하도록 설계된 트리 구조로, 어떤 값을 찾더라도 항상 비슷한 시간 복잡도(O(log N))로 데이터를 빠르게 검색할 수 있습니다. | |||
* '''SELECT''' 쿼리의 `WHERE` 절이나 `JOIN` 조건에 사용되는 컬럼에 인덱스를 생성하면 성능이 크게 향상됩니다. | |||
---- | |||
=== | === ⚖️ 인덱스의 장단점 === | ||
* '''장점''' : | |||
> * 데이터 검색(SELECT) 속도가 매우 빨라집니다. | |||
* '''단점''' : | |||
> * '''추가 저장 공간''': 인덱스 자체도 공간을 차지하므로, 테이블 크기의 약 10% 정도의 추가 공간이 필요합니다. | |||
> * '''느린 CUD(Create, Update, Delete) 속도''': 데이터를 추가, 수정, 삭제할 때마다 인덱스 테이블도 함께 업데이트해야 하므로, 쓰기 작업의 성능이 저하됩니다. | |||
> * '''무분별한 사용의 위험''': 너무 많은 인덱스는 오히려 성능을 저하시킬 수 있습니다. | |||
---- | |||
=== 💡 개발자 핵심 Point === | |||
* 인덱스는 '''읽기 작업은 빠르게, 쓰기 작업은 느리게''' 만듭니다. | |||
* 따라서, 데이터의 변경(INSERT, UPDATE, DELETE)은 적고 검색은 빈번한 컬럼에 인덱스를 생성하는 것이 가장 효과적입니다. | |||
* 카디널리티(Cardinality), 즉 중복도가 낮은(고유한 값이 많은) 컬럼에 인덱스를 생성해야 효율이 좋습니다. (예: `주민등록번호` O, `성별` X) | |||
* SQL 쿼리의 '''실행 계획(Execution Plan)'''을 분석하여, 쿼리가 인덱스를 잘 활용하고 있는지 주기적으로 확인하고 최적화하는 습관이 중요합니다. | |||
* | |||
* | |||
''' | |||
2025년 9월 6일 (토) 05:05 판
🔑 인덱스 (Index)
데이터베이스의 인덱스는 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 책의 맨 뒤에 있는 '찾아보기(색인)'와 같은 역할을 합니다. 특정 내용을 찾기 위해 책의 모든 페이지를 다 뒤지는 대신, 찾아보기를 통해 원하는 내용이 있는 페이지를 바로 찾을 수 있듯이, 인덱스는 데이터베이스가 특정 데이터를 빠르게 찾을 수 있도록 도와줍니다.
🤔 인덱스는 왜 필요한가?
인덱스가 없는 테이블에서 특정 데이터를 찾으려면, 데이터베이스는 테이블의 모든 행을 처음부터 끝까지 순차적으로 검색해야 합니다. 이를 풀 테이블 스캔(Full Table Scan)이라고 합니다. 데이터의 양이 적을 때는 문제가 없지만, 수백만, 수천만 건의 데이터가 있는 테이블에서는 풀 테이블 스캔이 매우 느리고 시스템에 큰 부하를 줍니다.
인덱스는 데이터와 해당 데이터의 위치(주소)를 키-값 쌍으로 미리 정렬하여 저장해 둠으로써, 풀 테이블 스캔을 피하고 데이터 검색 속도를 획기적으로 향상시킵니다.
⚙️ 인덱스의 동작과 자료구조
대부분의 RDBMS는 인덱스를 구현하기 위해 B-Tree(Balanced Tree) 자료구조를 사용합니다. B-Tree는 항상 균형을 유지하도록 설계된 트리 구조로, 어떤 값을 찾더라도 항상 비슷한 시간 복잡도(O(log N))로 데이터를 빠르게 검색할 수 있습니다.
- SELECT 쿼리의 `WHERE` 절이나 `JOIN` 조건에 사용되는 컬럼에 인덱스를 생성하면 성능이 크게 향상됩니다.
⚖️ 인덱스의 장단점
- 장점 :
> * 데이터 검색(SELECT) 속도가 매우 빨라집니다.
- 단점 :
> * 추가 저장 공간: 인덱스 자체도 공간을 차지하므로, 테이블 크기의 약 10% 정도의 추가 공간이 필요합니다. > * 느린 CUD(Create, Update, Delete) 속도: 데이터를 추가, 수정, 삭제할 때마다 인덱스 테이블도 함께 업데이트해야 하므로, 쓰기 작업의 성능이 저하됩니다. > * 무분별한 사용의 위험: 너무 많은 인덱스는 오히려 성능을 저하시킬 수 있습니다.
💡 개발자 핵심 Point
- 인덱스는 읽기 작업은 빠르게, 쓰기 작업은 느리게 만듭니다.
- 따라서, 데이터의 변경(INSERT, UPDATE, DELETE)은 적고 검색은 빈번한 컬럼에 인덱스를 생성하는 것이 가장 효과적입니다.
- 카디널리티(Cardinality), 즉 중복도가 낮은(고유한 값이 많은) 컬럼에 인덱스를 생성해야 효율이 좋습니다. (예: `주민등록번호` O, `성별` X)
- SQL 쿼리의 실행 계획(Execution Plan)을 분석하여, 쿼리가 인덱스를 잘 활용하고 있는지 주기적으로 확인하고 최적화하는 습관이 중요합니다.