데이터베이스 성능 최적화와 데이터 무결성을 보장하는 데 중요한 개념인 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_id와 hire_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기초 #개발자팁
'Program > ORACLE' 카테고리의 다른 글
[SQL] 오라클 NVL2 함수 활용법: NULL 값 처리하기 - NVL2 (2) | 2025.02.13 |
---|---|
[SQL] 오라클에서 특정 날짜의 분기 종료일(마지막 날짜) 구하는 방법 - ADD_MONTHS, LAST_DAY (0) | 2025.02.11 |
[SQL]📏 오라클 SQL에서 문자열 길이 계산하는 방법 - LENGTH, LENGTHB (0) | 2025.02.11 |
[SQL] 문자열 공백 제거 방법 - TRIM, REPLACE 등 (0) | 2025.02.10 |