[1] 이상(Anomaly) : 데이터베이스에서 정규화를 수행하지 않으면, 데이터의 중복이 발생하면서 무결성이 저하됨.
→ 테이블을 설계할 때 정규화가 올바르게 수행되지 않아 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류를 말함
- 삽입 이상(Insertion anomaly)
- : 특정 데이터가 존재하지 않아 중요한 데이터를 데이터베이스에 삽입할 수 없을 때 발생
- 삭제 이상(Deletion anomaly)
- : 특정 정보를 삭제하면, 원치 않는 정보도 삭제되는 현상
- 업데이트 이상(Update anomaly)
- : 테이블의 특정 데이터를 업데이트 했는데, 정상적으로 변경되지 않은 경우, 그리고 너무 많은 행을 업데이트 하는 것
[2] 인덱스(Index)
: 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
: 테이블의 특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장됨
: 컬럼의 값과 물리적 주소를 (key, value)의 한 쌍으로 저장함
- 인덱스의 장단점
- 장점
- 데이터가 정렬되어 있기 때문에 테이블에서 검색과 정렬 속도를 향상 시킴
- 조건 검색 WHERE 절의 효율성 : 보통 where절을 사용할 때 특정 조건에 맞는 데이터를 찾기 위해 데이터를 처음부터 끝까지 다 비교해야 하는데, 인덱스를 통해 데이터가 정렬되어 있으면 빠르게 찾아낼 수 있음
- 정렬 ORDER BY 정의 효율성 : 인덱스를 사용하면 order by를 통한 sort과정을 피할 수 있음
- MIN, MAX의 효율적인 처리가 가능
- 테이블 행의 고유성을 강화시킬 수 있음
- 시스템의 전반적인 부하를 줄일 수 있음
- 단점
- 정렬된 상태를 계속 유지시켜야 한다는 것
- 인덱스가 적용된 컬럼에 정렬을 변경시키는 INSERT, UPDATE, DELETE 명령어가 수행되면, 그 후에 재정렬을 해주어서 그에 따른 부하가 발생함
- 인덱스 스캔이 무조건 좋은 것은 아님
- 속도 향상을 위해 인덱스를 많이 만드는 것은 좋지 않음
- 인덱스를 관리하기 위해서는 데이터베이스의 약 10%에 해당하는 저장공간이 추가로 필요
- 때문에 인덱스를 많이 생성하면 하나의 쿼리문을 빠르게 만들수 있는 한편, 전체적인 데이터베이스의 성능 부하를 추래함
- 인덱스를 사용하면 좋은 경우
- 규모가 큰 테이블
- 삽입, 수정, 삭제 작업이 자주 발생하지 않는 컬럼
- WHERE이나 ORDER BY, JOIN 등이 자주 사용되는 컬럼
- 데이터의 중복도가 낮은 컬럼
- : 인덱스를 효율적으로 사용하기 위해선 데이터의 range가 넓고 중복이 적을수록, 조회가 많거나 정렬된 상태가 유용한 컬럼에 사용하는 것이 좋음
- 인덱스의 자료구조
- 해시 테이블(Hash Table) : key와 value를 한 쌍으로 데이터를 저장하는 자료구조
- B+Tree : 기존 B-Tree의 단점을 개선시킨 자료구조로, 균형 잡힌 이진 검색 트리
- 내부 노드(Internal node)와 단말 노드(Leaf node)로 구분
- 데이터는 단말노드에서만 저장, 내부 노드에는 검색을 위한 인덱스만 저장
- 모든 리프 노드가 연결리스트로 연결되어 있으며, 순차적으로 저장되어 있음
- → 범위 검색(Range Search)나 순차 검색(Sequential Search)에 효율적
'CS > Database' 카테고리의 다른 글
[CS] Redis (1) | 2023.11.01 |
---|---|
[CS] 트랜잭션의 격리 수준 (Transaction Isolation Level) (1) | 2023.11.01 |
[CS] 트랜잭션 (Transaction) (0) | 2023.11.01 |
[CS] 정규화 (1) | 2023.11.01 |
[CS] Key, Join, NoSQL (2) | 2023.10.23 |