인덱스 생성/변경/삭제

선봉·2023년 3월 7일
0

MySQL

목록 보기
28/36

인덱스 생성

CREATE INDEX으로 생성된 인덱스는 보조 인덱스이다.

WHERE절에 사용되는 열에 인덱스를 만들어야 한다.

자주 사용하는 열에 인덱스를 만들어야 한다.

데이터의 중복도낮아야 성능이 좋다.

JOIN에 자주 사용되는 열에 인덱스를 만드는 것이 좋다.

데이터가 자주 변경되는 열에는 인덱스를 만들지 않는다. (INSERT/UPDATE/DELETE)

  • 기본 구문
CREATE INDEX 인덱스이름 ON 테이블이름 (컬럼이름);
  • UNIQUE 인덱스 구문
CREATE UNIQUE INDEX 인덱스이름 ON 테이블이름 (컬럼이름);
  • 인덱스 생성 시 다중 컬럼 사용
CREATE INDEX 인덱스이름 ON 테이블이름 (컬럼1, 컬럼2, ...);
  • FOREIGN KEY를 위한 인덱스 생성
ALTER TABLE 테이블이름 ADD INDEX 인덱스이름 (컬럼이름);

FOREIGN KEY 제약 조건을 위한 인덱스를 생성할 때는 ALTER TABLE 문을 사용합니다.
예를 들어, "orders" 테이블에서 "customer_id" 컬럼을 참조하는 FOREIGN KEY를 생성하려면
다음과 같이 작성할 수 있습니다.

ALTER TABLE orders ADD INDEX idx_customer (customer_id);

인덱스 제거

모든 인덱스를 제거할 때는 보조 인덱스를 먼저 제거하는 것이 좋다

사용하지 않는 인덱스는 제거해야 한다.

클러스터형 인덱스가 없는 경우가 성능이 좋은 경우도 있다.

  • 기본 구문
DROP INDEX 인덱스이름 ON 테이블이름;
  • 외래키 알아내는 구문
SELECT table_name, constraint_name
	FROM information_schema.referential_constraints
    WHERE constraint_schema='sqldb';	

  • 인덱스 생성 실습
USE sqldb;
show index from usertbl;

show table status like 'usertbl'; 
-- index_length(인덱스길이) 0 이다. 보조인덱스에 따라 길이가 달라진다.

create index idx_usertbl_addr
	on usertbl (addr);-- 중복허용된 보조인덱스가 생성

show index from usertbl; 
show table status like 'usertbl'; 
-- 아직 인덱스 길이가 0이다.
-- 보조인덱스가 적용이 안되었기 때문이다. 아래 쿼리문을 통해 적용시켜야한다.

ANALYZE TABLE usertbl; -- 보조인덱스 적용된다.
profile
백엔드 개발자

0개의 댓글

관련 채용 정보