인덱스(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

+ Recent posts