일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- nat의 유형
- 트리와 그래프
- 트랜잭션의 acid 특성
- nat(network address translation)의 역할과 사용 이유
- 데이터 바인딩
- rdbms와 nosql의 차이점
- 함수형 객체지향형 차이점
- 인덱스의 장단점
- 로드 밸런서의 종류
- nat의 장단점
- 파티셔닝의 종류
- 인덱스의 역할과 사용 이유
- acid 특성
- orm(object-relational mapping)의 장단점
- rest와 soap의 차이점
- Spring REST API
- 트리 그래프 차이점
- 데이터베이스 락(lock)의 종류와 동작 방식
- 객체지향 프로그래밍
- REST API
- 트리 그래프 차이
- spring rest api 설정
- nat의 작동 방식
- join의 종류
- Spring
- 린크드 리스트
- 인덱스의 역할
- 샤딩(sharding)과 파티셔닝(partitioning)의 개념
- 정규화와 비정규화의 개념 및 장단점
- Spring Boot
- Today
- Total
♠개발자의 작은 서재♠
인덱스의 역할과 사용 이유 본문
1. 인덱스의 역할
- 검색 속도 향상: 인덱스는 특정 열의 데이터를 빠르게 찾을 수 있도록 도와줍니다. 예를 들어,
user_id
열에 인덱스를 생성하면user_id
를 기준으로 데이터를 검색할 때 인덱스를 통해 빠르게 찾을 수 있습니다. - 데이터 정렬 도움: 인덱스는 데이터가 특정 순서로 정렬되어 저장된 것처럼 보이게 합니다. 이를 통해 정렬된 데이터를 더 빠르게 조회할 수 있습니다.
- 중복 방지: 고유 인덱스(Unique Index)를 설정하면, 해당 열에 중복된 값이 들어가는 것을 방지할 수 있습니다. 예를 들어,
email
열에 고유 인덱스를 걸면 동일한 이메일이 두 번 이상 입력되는 것을 막습니다. - 쉽게 설명: 인덱스는 책의 "목차"와 같아서, 필요한 페이지를 빨리 찾아갈 수 있게 해줍니다. 목차가 없으면 모든 페이지를 일일이 넘겨야 하지만, 목차가 있으면 바로 찾을 수 있죠.
2. 인덱스의 사용 이유
- 빠른 조회: 인덱스는 데이터를 찾을 때 일일이 모든 행을 읽는 대신, 인덱스를 통해 빠르게 접근할 수 있습니다. 대량의 데이터를 다루는 시스템에서 조회 속도를 크게 향상시킵니다.
- 정렬 작업 최적화: 인덱스를 사용하면 특정 열에 대한 정렬 작업이 더 빠르게 수행됩니다. 인덱스를 사용하지 않으면 테이블의 모든 데이터를 정렬해야 해서 속도가 느려질 수 있습니다.
- JOIN 및 GROUP BY 최적화: 여러 테이블을 결합하거나 데이터 그룹화할 때 인덱스를 통해 빠르게 데이터를 검색하여 작업 성능을 높일 수 있습니다.
- 쉽게 설명: 인덱스를 사용하면 데이터가 많아도 특정 데이터를 찾는 속도가 매우 빨라집니다. 예를 들어, 전화번호부에서 이름을 찾는 경우 이름이 가나다 순으로 정렬되어 있다면 더 빨리 찾을 수 있는 것과 비슷합니다.
3. 인덱스 예시 코드
기본 인덱스 생성: 특정 열에 인덱스를 설정하는 기본 예시입니다.
CREATE INDEX idx_user_name ON users (name);
이 코드는 users
테이블의 name
열에 인덱스를 생성하는 예입니다. 이제 name
을 기준으로 데이터를 검색할 때 더 빠르게 찾을 수 있습니다.
고유 인덱스 생성: 중복된 데이터를 방지할 수 있는 인덱스입니다.
CREATE UNIQUE INDEX idx_user_email ON users (email);
이 코드는
users
테이블의email
열에 고유 인덱스를 생성하는 예입니다. 동일한 이메일 주소가 두 번 들어가는 것을 방지할 수 있습니다.복합 인덱스 생성: 두 개 이상의 열에 인덱스를 설정하여 복합 조건 검색을 최적화하는 방법입니다.
CREATE INDEX idx_user_name_age ON users (name, age);
이 코드는
users
테이블에서name
과age
두 열을 함께 인덱스로 설정합니다.name
과age
를 모두 조건으로 하는 검색을 더 빠르게 할 수 있습니다.
4. 인덱스의 장단점
- 장점:
- 검색 속도 향상: 인덱스를 통해 데이터를 더 빠르게 찾을 수 있어 성능이 향상됩니다.
- 정렬 및 그룹화 최적화: 데이터 정렬이나
GROUP BY
와 같은 쿼리에서 성능을 높여줍니다. - 데이터 일관성 보장: 고유 인덱스를 통해 특정 열의 중복 입력을 방지할 수 있습니다.
- 단점:
- 추가적인 저장 공간 필요: 인덱스는 테이블 외에 별도의 저장 공간을 차지합니다.
- 데이터 삽입 및 수정 시 성능 저하: 인덱스가 있는 열에 데이터를 추가하거나 수정할 때, 인덱스도 함께 갱신해야 하므로 성능이 떨어질 수 있습니다.
- 과도한 인덱스 사용: 너무 많은 인덱스를 생성하면 오히려 성능을 떨어뜨릴 수 있으므로, 필요한 열에만 신중하게 인덱스를 설정해야 합니다.
5. 인덱스가 없는 경우와 비교
인덱스가 없는 경우: 모든 행을 처음부터 끝까지 읽는 풀 스캔을 해야 합니다. 데이터가 많아질수록 검색 시간이 길어집니다.
인덱스가 있는 경우: 인덱스를 사용해 필요한 데이터가 있는 위치를 바로 찾아가므로 검색 속도가 빨라집니다.
예시 코드 비교:
-- 인덱스 없이 검색 SELECT * FROM users WHERE name = 'Alice'; -- 인덱스가 있을 때 검색 CREATE INDEX idx_user_name ON users (name); SELECT * FROM users WHERE name = 'Alice';
첫 번째 쿼리는 인덱스가 없을 때 모든 행을 검색하는 경우이고, 두 번째 쿼리는 name
열에 인덱스를 생성한 후 Alice
라는 이름을 가진 사용자를 빠르게 찾는 예입니다. 인덱스가 있는 경우 데이터베이스는 바로 해당 위치를 찾아가기 때문에 훨씬 빠르게 결과를 반환합니다.
6. 인덱스를 사용하는 최적의 상황
- 자주 검색되는 열: 인덱스를 생성하면 검색이 자주 이루어지는 열에서 성능을 향상시킬 수 있습니다.
- 정렬 또는 그룹화가 자주 발생하는 열:
ORDER BY
,GROUP BY
와 같은 쿼리에서 정렬 및 그룹화가 필요한 열에 인덱스를 설정하면 효율적입니다. - JOIN이 자주 발생하는 열: 여러 테이블을 결합할 때 인덱스가 있으면 더 빠르게 조인을 수행할 수 있습니다.
인덱스는 데이터베이스에서 빠른 검색을 가능하게 하는 중요한 역할을 하지만, 잘못 사용하면 성능에 악영향을 미칠 수 있습니다. 데이터베이스 설계 시 쿼리 빈도와 데이터 양을 고려하여 인덱스를 효율적으로 사용하는 것이 중요합니다.
'IT 면접 질문 총정리!! > 데이터베이스' 카테고리의 다른 글
데이터베이스 락(lock)의 종류와 동작 방식 (0) | 2024.10.29 |
---|---|
트랜잭션의 ACID 특성 (1) | 2024.10.29 |
정규화(Normalization)와 비정규화(Denormalization)의 개념 및 장단점 (0) | 2024.10.29 |
조인의 종류(예: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN)와 차이점 (0) | 2024.10.29 |
RDBMS와 NoSQL의 차이점 (0) | 2024.10.29 |