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; -- 보조인덱스 적용된다.