인덱스 수업 들었어용
PRIMARY KEY, FOREIGN KEY, UNIQUE 제약조건이 설정되면-- 테이블의 인덱스 목록 조회
SHOW INDEX FROM [테이블명];
-- 인덱스 삭제 (기본 PK 인덱스는 삭제 불가/권장하지 않음)
ALTER TABLE [테이블명]
DROP INDEX [인덱스명];
-- 단일 컬럼 인덱스 생성
CREATE INDEX [인덱스명]
ON [테이블명] ([컬럼명]);
-- 예) author 테이블의 name 컬럼에 인덱스 생성
CREATE INDEX name_index ON author(name);
-- 복합 인덱스 생성 (여러 컬럼 동시 지정)
CREATE INDEX [인덱스명]
ON [테이블명] ([컬럼1], [컬럼2]);
-- 예) name, age 컬럼 복합 인덱스 생성
CREATE INDEX name_age_index ON author(name, age);
-- 인덱스 없는 테이블 생성
CREATE TABLE author_no_index (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255),
name VARCHAR(255)
);
-- 인덱스 있는 테이블 생성 (email에 UNIQUE 인덱스)
CREATE TABLE author_with_index (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) UNIQUE,
name VARCHAR(255)
);
![]() |
|---|
| 709ms → 340ms 시간 단축 확인 |
DELIMITER //
CREATE PROCEDURE insert_authors()
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE email VARCHAR(100);
DECLARE batch_size INT DEFAULT 10000; -- 한번에 삽입할 행 수
DECLARE max_iterations INT DEFAULT 100; -- 전체 반복횟수 (ex. 100만 건)
DECLARE iteration INT DEFAULT 1;
WHILE iteration <= max_iterations DO
START TRANSACTION;
WHILE i <= iteration * batch_size DO
SET email = CONCAT('bradkim', i, '@naver.com');
INSERT INTO author (email) VALUES (email);
SET i = i + 1;
END WHILE;
COMMIT;
SET iteration = iteration + 1;
-- 각 트랜잭션 후 0.1초 지연 (부하 완화)
DO SLEEP(0.1);
END WHILE;
END //
DELIMITER ;
프로시저를 사용하여 큰 데이터를 사용하여 진행해보니 체감되는 듯
index 활용을 잘 해봐야겠다!
개요 ㅈㄴ 귀엽네 ㅋㅋ
제가 아는 인덱스는 인덱스 라이브로룸 프로히비토룸에서 끝났습니다