웹 개발/DB

[SQL] INDEX

cha430 2026. 3. 5. 12:11

인덱스

자주 조회하는 컬럼에 적용해서 조회 시간을 단축시키는 데에 쓰인다.

 

다만 데이터가 긴 경우 (ex. url)에는 인덱스를 사용하지 않고

데이터를 해시로 만들어서 인덱스를 짧게 만들어 사용하는 게 좋다.

 


 

 

Index 에는 종류가 여러 가지 있다.

 

 

- PRIMARY KEY

 : 기본키

 : 중복되지 않는 유일한 키

 : 테이블 당 기본키 하나 지정 가능

 : where 문에서 데이터 가져올 때 가장 빠르게 조회할 수 있다.

 

 

- NORMAL KEY

 : 중복을 허용하는 인덱스

 : 조회 시 primary, unique 보다 속도가 느린 편 (인덱스 걸지 않은 컬럼보다 빠르게 조회)

 : 한 테이블에 여러 개 지정할 수 다.

 

 

- UNIQUE KEY

 : 유니크

 : 중복을 허용하지 않는 유일한 키

 : 한 테이블에 여러 개 지정할 수 있다.

 : 상대적으로 고속으로 데이터를 가져올 수 있다.

 

 

- FOREIGN KEY

 : 외래 키

 : 다른 테이블과의 관계성을 부여하는 키

 

 

- FULL TEXT

 : 자연어 검색

 : MySQL의 기본설정(ft_min_word_len)이 4로 되어있기 때문에 최소 네 글자 이상 입력하거나, 이 값을 조정해야 한다.

 : MyISAM(마이아이삼) 에서만 지원

    >> MyISAM : MySQL 에서 사용하는 스토리지 엔진. 데이터를 저장하는 방식 중 하나.

 

사용 방법

  : '영문과에' 문자열을 포함하는 introduction 컬럼을 조회

SELECT introduction
FROM student
WHERE MATCH(introduction) AGAINST('영문과에');

* where 절에 저렇게 조건을 주는 경우

해당 컬럼에 대해 Full-Text 검색이 유효한 행만 반환하라는 뜻

 

 

 


 

 

ex)

CREATE TABLE `student` (
 `id` int(3) NOT NULL AUTO_INCREMENT,
 `name` char(4) NOT NULL,
 `address` varchar(50) NOT NULL,
 `number` char(255),
 `department` enum('국문과', '영문과', '수학과', '컴퓨터공학과') NOT NULL,
 `introduction` text NOT NULL,
 PRIMARY KEY(`id`),
 UNIQUE KEY `idx_number` (`number`) USING BTREE,
 KEY `idx_department` (`department`),
 KEY `idx_department_name` (`department`,`address`),
 FULLTEXT KEY `idx_introduction` (`introduction`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

 

- id 컬럼을 기본키로 지정

- `idx_number` 라는 이름으로 `number`컬럼을 유니크 키로 지정

- `idx_department`라는 이름으로 `department`컬럼을 normal 키로 지정

- `idx_department_name`라는 이름으로 `department` 컬럼과 `address` 컬럼 두 개를 하나의 normal 키로 지정 = 중복키

- FULLTEXT 사용할 때는 엔진을 MyISAM으로 지정해야 함. `introduction`을 FULL TEXT 로 지정

 

 

- 인덱스를 이용해서 중복키를 지정할 수 있다.

 : 하나의 키에 여러 개의 컬럼을 포함

 

사용 방법

  : department 컬럼과 address 컬럼을 조회하는 경우 중복키로 지정해두면 빠르게 조회할 수 있다.

SELECT * FROM student WHERE department='국문과' AND address='제주'

 

 

기본키 지정하는 방법

 

 

1. 아래에 따로 쓰는 방식

CREATE TABLE member (
    id INT,
    name VARCHAR(50),
    PRIMARY KEY (id)
);

 

2. 컬럼 옆에 바로 쓰는 방식

CREATE TABLE member (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

 

3. 테이블 생성 후에 기본키 추가할 때

ALTER TABLE member
ADD CONSTRAINT uk_member_email UNIQUE (email);

 

 

'웹 개발 > DB' 카테고리의 다른 글

[MiriaDB] IDE(IntelliJ)환경에서 DB insert 하기  (0) 2025.05.15
[MariaDB] DB 연동  (0) 2025.05.15
[MariaDB] DBeaver , IntelliJ이용한 DB 연결  (0) 2025.05.14