본문 바로가기
Program/ORACLE

[SQL] CREATE INDEX vs PRIMARY KEY: 차이점과 사용법

by Dev200 2025. 2. 14.

 

데이터베이스 성능 최적화와 데이터 무결성을 보장하는 데 중요한 개념인 CREATE INDEX(인덱스 생성)PRIMARY KEY(기본 키) 에 대해 알아보겠습니다.


🔹 CREATE INDEX vs PRIMARY KEY 비교

구분CREATE INDEXPRIMARY KEY

역할 검색 속도 최적화 데이터 무결성 보장
중복 허용 가능 (유니크 인덱스 제외) 불가능 (중복 불가)
NULL 값 허용 가능 불가능 (NOT NULL)
자동 인덱스 생성 직접 생성해야 함 자동으로 인덱스 생성됨

1. CREATE INDEX (인덱스 생성)

📌 기본 인덱스 생성

CREATE INDEX idx_employee_name ON employees (name);

설명: employees 테이블의 name 컬럼에 인덱스를 생성하여 이름 검색 속도를 최적화합니다.

 

📌 유니크 인덱스 생성

CREATE UNIQUE INDEX idx_employee_email ON employees (email);

설명: email 컬럼의 값이 중복되지 않도록 유니크 인덱스 설정

 

📌 복합(다중 컬럼) 인덱스

CREATE INDEX idx_employee_dept ON employees (department_id, hire_date);

설명: department_idhire_date를 함께 사용하는 조회 속도를 향상시킵니다.

 


2. PRIMARY KEY (기본 키)

🔹 기본 키는 테이블에서 각 행을 유일하게 식별하는 값이며, NULL과 중복을 허용하지 않음 🔹 자동으로 유니크 인덱스가 생성되므로 별도의 인덱스를 만들 필요 없음.

📌 테이블 생성 시 PRIMARY KEY 설정

CREATE TABLE employees (
    employee_id NUMBER PRIMARY KEY,
    name VARCHAR2(100),
    email VARCHAR2(100) UNIQUE,
    department_id NUMBER
);

설명: employee_id가 기본 키로 설정되어 NULL 불가 + 중복 불가

 

📌 기존 테이블에 PRIMARY KEY 추가

ALTER TABLE employees ADD CONSTRAINT pk_employee PRIMARY KEY (employee_id);

설명: 기존 테이블에서 employee_id 컬럼을 기본 키로 지정합니다.

 

📌 복합 PRIMARY KEY 설정 (2개 이상 컬럼)

CREATE TABLE orders (
    order_id NUMBER,
    product_id NUMBER,
    quantity NUMBER,
    PRIMARY KEY (order_id, product_id)
);

설명: order_id + product_id 조합이 기본 키가 되어 중복 불가합니다.


✅ 정리

기능 CREATE INDEX PRIMARY KEY
역할 검색 속도 최적화 데이터 무결성 보장
자동 생성 직접 생성해야 함 자동으로 유니크 인덱스 생성
중복 허용 허용 (유니크 인덱스 제외) 불가능 (중복 금지)
NULL 허용 가능 불가능 (NOT NULL)

🔹 검색 최적화가 필요하면 → CREATE INDEX
🔹 **데이터 무결성(중복 방지)**가 필요하면 → PRIMARY KEY
🚀 이제 최적의 방식으로 활용하세요! 😊


#️⃣ #데이터베이스 #SQL #인덱스 #CREATEINDEX #PRIMARYKEY #DB최적화 #검색속도 #유니크인덱스 #복합인덱스 #데이터무결성 #ALTERTABLE #테이블설계 #쿼리성능 #DB설계 #SQL튜닝 #오라클DB #MYSQL #POSTGRESQL #데이터베이스관리 #SQL기초 #개발자팁