728x90
반응형
키란?
- 키는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 “기준이 되는 속성(Attribute)”을 말한다.
사용 이유
- 테이블에서 내가 원하는 데이터를 찾으려면 많은 시간이 필요한데 이러한 탐색 시간을 줄여줄 수 있는 것이 키다.
키종류
이름, 특징, 조건 설명 ( + null 값 가능 여부 )
Candidate Key (후보키)
- 후보키는 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들을 말한다.
- 하나의 릴레이션내에서는 중복된 튜플들이 있을 수 없으므로 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재한다.
- 후보키는 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 한다.
- 위 테이블에서 학생번호, 휴대폰 등이 후보키이다. 이름은 동명이인이 있으므로 유일성을 만족하지 않는다. 나이도 마찬가지로 같은 나이가 있으므로 유일성을 만족하지 않는다.
- NULL 값 불가능
- 유일성 : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있다.
- 최소성 : 모든 레코드들을 유일하게 식별하는데 꼭 필요한 속성만으로 구성되어 있어야 한다.
Primary Key (기본키)
- 기본키는 후보키 중에서 선택한 주 키(Main Key)이다.
- 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다.
- NULL 값 불가능
- 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없다.
- 위 테이블에서 기본키는 후보키 중에서 고르면 된다. 학생번호나 휴대폰 중 고르면 된다.
Alternate Key (대체키)
- 후보키가 둘 이상일때 기본키를 제외한 나머지 후보키들을 말한다.
- 보조키라고도 한다.
- 만약 학생번호를 기본키로 골랐다면 휴대폰이 대체키가 된다.
- NULL 값 불가능
Super Key (슈퍼키)
- 슈퍼키는 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키로서 릴레이션을 구성하는 모든 튜플들 중 슈퍼키로 구성된 속성의 집합과 동일한 값을 나타나지 않는다.
- 슈퍼키는 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족시키지만, 최소성은 만족시키지 못한다.
- 만약 (학생번호, 이름) 을 묶어서 키로 사용하면, 동명이인이 있어도 튜플을 구분할 수 있다. 예를 들어 2번 제니는 3번 제니와 다른 제니임을 알 수 있다. 따라서 유일성은 만족시키지만, 학생번호 하나만으로도 구분할 수 있다는 최소성을 만족시키지 못한다. 따라서 (학생번호, 이름), (학생번호, 나이), (휴대폰, 나이) 등등은 슈퍼키가 될 수 있다.
- 여러개의 속성으로 슈퍼키를 만들 때 반드시 1개 이상의 후보키가 포함되어야 한다.
- NULL 값 가능
Foreign Key (외래키)
- 관계를 맺고 있는 릴레이션 R1, R2 에서 릴레이션 R1이 참조하고 있는 릴레이션 R2의 기본키와 같은 R1 릴레이션의 속성을 외래키라고 한다.
- 외래키는 참조되는 릴레이션의 기본키와 대응되어 릴레이션 간에 참조 관계를 표현하는데 중요한 도구이다.
- NULL 값 가능
—----------------------------------------------------------------------------------------------------------
Index에 대해 설명
- 인덱스(index)는 데이터베이스에서 검색 속도를 향상시키기 위한 구조입니다. 데이터베이스 테이블의 컬럼(열)에 대한 키-값 쌍을 가지고 있으며, 데이터를 더 빠르게 검색할 수 있도록 하며, 데이터베이스의 성능을 향상시키는데 중요한 역할을 합니다.
- 인덱스는 자주 사용되는 컬럼에 대해 생성됩니다. 해당 컬럼의 값을 정렬하여 저장하고, 검색 쿼리에서 해당 컬럼에 대한 조건을 포함할 때, 데이터베이스는 인덱스를 사용하여 빠르게 데이터를 검색합니다.
- 그러나 인덱스를 생성하면 데이터 저장 및 갱신 작업에 추가적인 오버헤드가 발생하므로, 필요한 경우에만 인덱스를 생성해야 합니다.
장/단점
장점
- DBMS 의 인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 탐색하는데는 빠르다.
단점
- 새로운 값을 추가하거나 삭제, 수정하는 경우에는 쿼리문 실행 속도가 느려진다.
DBMS는 Index를 어떻게 관리하고 있나요? (Index 자료구조에 대해 설명해주세요)
B+Tree 인덱스 자료구조
- 일반적으로 사용되는 인덱스 알고리즘. B+Tree 인덱스는 칼럼의 값을 변형하지 않고(사실 값의 앞부분만 잘라서 관리한다.), 원래의 값을 이용해 인덱싱하는 알고리즘이다.
해시 테이블
- 칼럼의 값으로 해시 값을 계산해서 인덱싱하는 알고리즘으로 매우 빠른 검색을 지원한다. 하지만 값을 변형해서 인덱싱하므로, 특정 문자로 시작하는 값으로 검색을 하는 전방 일치와 같이 값의 일부만으로 검색하고자 할 때는 해시 인덱스를 사용할 수 없다. 주로 메모리 기반의 데이터베이스에서 많이 사용한다.
왜 index 를 생성하는데 b-tree 를 사용하는가?
- 데이터에 접근하는 시간복잡도가 O(1)인 hash table 이 더 효율적일 것 같은데? SELECT 질의의 조건에는 부등호(<>) 연산도 포함이 된다. hash table 을 사용하게 된다면 등호(=) 연산이 아닌 부등호 연산의 경우에 문제가 발생한다. 동등 연산(=)에 특화된 hashtable은 데이터베이스의 자료구조로 적합하지 않다.
Index 의 성능과 고려해야할 사항
- 인덱스를 생성하면 검색 속도는 향상되지만, INSERT, DELETE, UPDATE 쿼리문을 실행할 때 추가적인 오버헤드가 발생한다. 그리고 컬럼을 이루는 데이터의 형식에 따라 인덱스의 성능이 악영향을 미칠 수 있다. 성별 같은 값의 range가 적은 경우 인덱스를 생성하면 비효율적일 수 있다. 따라서 모든 컬럼에 대해 인덱스를 생성하는 것은 효율적이지 않다. 필요한 경우에만 적절한 컬럼에 대해서만 인덱스를 생성해야 한다.
728x90
반응형
'DB' 카테고리의 다른 글
[DB] ORM, 장단점, 종류 질문, 답변 (0) | 2023.05.10 |
---|---|
[DB] 트랜잭션, Lock, ACID, 격리 수준 질문, 답변 (0) | 2023.05.10 |
[DB] JOIN, 종류, ON, HAVING, 쿼리수행순서 질문, 답변 (0) | 2023.05.10 |
[DB] 특징, DDL, DML, DCL, RDBMS, NoSQL 질문, 답변 (0) | 2023.05.10 |
DB 부하분산(간단 정리) (0) | 2023.04.27 |
댓글