인덱스(Index): 테이블의 특정 컬럼(열) 또는 컴럼들의 조합에 대해 데이터를 빠르게 검색할 수 있도록 돕는 자료구조. → 데이터와 해당 데이터가 저장된 위치를 매핑하여 검색 속도를 크게 향상시키는 역할을 함.
장점
- 검색 속도를 빠르게 하여 대량의 데이터 처리 성능을 향상 시킴.
- WHERE, ORDER BY, GROUP BY 절과 같은 쿼리에 효율적.
- 중복 방지 및 유일성 보장 가능
단점
- 추가적인 저장 공간 필요, 인덱스 생성 및 관리에 따른 오버헤드 발생.
- 데이터 수정 작업(CREATE, UPDATE, DELETE) 시 성능 저하 가능.
종류
- 기본인덱스: 단일 칼럼 기준으로 생성
- 복합인덱스: 여러 칼럼을 조합하여 인덱스 생성
- 클러스터형 인덱스: 테이블 데이터 자체가 인덱스 순서로 저장됨.
- 논클러스터형 인덱스: 인덱스만 따로 있고, 실제 데이터는 별도로 저장됨.
클러스터형 인덱스와 논클러스터형 인덱스
구분 | 클러스터형 인덱스 | 논클러스터형 인덱스 |
데이터 저장 방식 | 데이터 자체가 정렬된 인덱스 구조에 저장됨. | 인덱스와 실제 데이터가 분리되어 있음. |
인덱스 위치 | 인덱스=데이터 | 인덱스 ≠ 데이터(별도로 데이터 위치를 저장) |
테이블당 개수 | 1개만 가능 | 여러 개 생성 가능 |
조회 속도 | 빠름(바로 접근) | 인덱스→실제 데이터로 한번 더 찾아야 함. |
예시 | 도서관 책장이 책 이름순으로 실제 책이 정렬되어 있는 구조 | 책 이름만 정리된 목록(색인)이 따로 있고, 거기서 위치를 보고 책장으로 이동하는 구조 |
//클러스터형 인덱스
CREATE TABLE Student (
StudentID INT PRIMARY KEY, -- 기본 키는 자동으로 클러스터형 인덱스
Name VARCHAR(50),
Age INT
);
//그림으로 이해
[정렬된 인덱스 = 실제 데이터]
1001 홍길동 20
1002 이영희 21
1003 김민준 19
//논클러스터형 인덱스
CREATE INDEX idx_name ON Student(Name);
//그림으로 이해
[인덱스]
이영희 → 1002
김민준 → 1003
[실제 데이터]
1001 홍길동 20
1002 이영희 21
1003 김민준 19
사용
- 자주 검색되는 컬럼
- 자주 JOIN이나 WHERE절에 사용되는 컬럼
- 자주 정렬(ORDER BY)에 사용되는 컬럼
키(Key): 테이블 내에서 특정 레코드를 고유하게 식별하거나, 다른 테이블과의 관계를 연결하는데 사용→ 테이블 간의 관계를 설정하고 데이터의 무결성을 유지하는데 사용. (한 테이블 안에 같은 레코드는 존재할 수 없음)
기본 키(Primary key): 테이블에서 각 행을 고유하게 식별하는데 사용되는 열 또는 열의 조합.
특징
- 테이블당 하나의 기본 키만 존재.
- NULL 값을 가질 수 없음.
- 테이블 내에 유일하게 존재.
CREATE TABLE Student (
StudentID INT PRIMARY KEY, -- 기본 키
Name VARCHAR(50),
Age INT
);
외래 키(Foreign key): 부모 테이블의 키를 참조하는 속성 또는 키.
특징
- 참조하는 테이블의 기본 키와 데이터 타입이 일치해야 함.
- NULL 값을 가질 수 있음.(NULL 값을 허용하는 경우)
- 테이블 간의 관계를 설정하고 유지하는데 사용됨.
CREATE TABLE Enrollment (
StudentID INT, -- 외래 키
CourseID INT,
FOREIGN KEY (StudentID) REFERENCES Student(StudentID)
);
유니크 키(Unique key): 값의 중복을 허용하지 않는 키.
특징
-
유니크 키가 설정된 칼럼에 입력되는 데이터가 각각 유일하다는 것을 보장해줌.
-
하나의 테이블에 여러 개의 유니크 키를 설정할 수 있음.
-
주로 기본 키를 설정한 후 추가적으로 고유한 식별자가 있는 경우 유니크 키로 설정.
-
NULL 값을 가질 수 있음.
후보 키(Candidate Key): 테이블에서 각 행을 고유하게 식별할 수 있는 열 또는 열의 조합.
특징
- 테이블에 여러 개의 후보 키 존재.
- NULL값을 가질 수 없음.
- 후보 키 중에서 기본 키를 선택함.
슈퍼 키(Super Key): 테이블에서 각 행을 고유하게 식별할 수 있는 열 또는 열의 조합.
특징
- 테이블에 여러 개의 슈퍼 키가 존재.
- 슈퍼 키는 테이블의 모든 열을 포함할 수 있음.
- 슈퍼 키를 구성하는 열 중에서 일부 열을 제거해도 고유하게 식별 가능하면 슈퍼 키가 될 수 있음.
대체 키(Alternate Key): 후보 키 중에서 기본 키로 선택되지 않은 나머지 후보 키.
특징
- 기본 키 대체 가능.
AUTO_INCREMENT: 데이터베이스에서 사용되는 속성. 테이블의 특정 열에 자동으로 고유한 숫자 값을 생성하고 할당하는데 사용.
INSERT INTO로 레코드 추가시 AUTO_INCREMENT에 해당하는 컬럼에 NULL을 넣거나 입자 목록에서 생략하면 자동으로 값이 채워짐.
INSERT INTO market VALUES(NULL, '김민준', '사과', 50, 1300, '2023-03-07 10:10:10’);
INSERT INTO market (seller, product, amount, price, reg_date) VALUES('김민준', '사과', 50, 1300, '2023-03-07 10:10:10’);
'2025-1 > 데이터베이스' 카테고리의 다른 글
05. 부속 질의 (0) | 2025.04.10 |
---|---|
04. 정렬 쿼리, 집계 함수와 GROUP BY절, join (0) | 2025.04.10 |
03. 무결성 제약조건 (0) | 2025.04.08 |
01.DBMS (0) | 2025.04.07 |