CREATE INDEX
으로 생성된 인덱스는 보조 인덱스이다.
WHERE
절에 사용되는 열에 인덱스를 만들어야 한다.자주 사용하는 열에 인덱스를 만들어야 한다.
데이터의 중복도가 낮아야 성능이 좋다.
JOIN
에 자주 사용되는 열에 인덱스를 만드는 것이 좋다.데이터가 자주 변경되는 열에는 인덱스를 만들지 않는다. (INSERT/UPDATE/DELETE)
CREATE INDEX 인덱스이름 ON 테이블이름 (컬럼이름);
CREATE UNIQUE INDEX 인덱스이름 ON 테이블이름 (컬럼이름);
CREATE INDEX 인덱스이름 ON 테이블이름 (컬럼1, 컬럼2, ...);
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; -- 보조인덱스 적용된다.