데이터베이스에 테이블을 작성할때 인덱스를 적절하게 설정을 해줘야합니다.
인덱스 설정을 안하거나 너무 많이 하는경우에는 데이터베이스 성능에 영향을 주게 됩니다.
또는 데이터베이스가 있는 서버에 부하가 걸리기도 합니다.
인덱스를 작성해줘야 하는 이유
테이블 내 데이터양이 많고 조건 검색을 하는 경우.
WHERE문 조건, 결합 조검, ORDER BY문을 이용하는 경우.
NULL값이 많은 데이터로 부터 NULL이외의 값을 검색하는 경우.
인덱스를 작성할 필요가 없는 경우
테이블의 규모가 작고 테이블 전체를 표시하는 경우.
열의 값이 자주 삽입, 갱신, 삭제되는 경우.
WHERE구문의 조건으로 사용되지만 줄이 식의 일부로 참조되는 경우.
인덱스 설정 하는 방법
일반
ALTER TABLE landing_pages ADD INDEX index_name(user_id)
복수 컬럼 인덱스
ALTER TABLE landing_pages ADD INDEX index_name(user_id, created)
MySQL에서는 하나의 쿼리를 실행하면 하나의 테이블의 하나의 인덱스만 설정되기 때문에 여러 개의 인텍스를 지정하고 싶은 경우에는 콤마를 이용하여 여러 컬럼을 설정하여 지정
유니크 인덱스
ALTER TABLE landing_pages ADD UNIQUE(id)
인덱스 삭제
ALTER TABLE table_name DROP INDEX index_name;
인덱스가 사용될 떄
● 컬럼값을 정수와 비교할때
● 컬럼값 전체로 JOIN할때
● 컬럼값의 범위를 요구할때
● LIKE로 문자열의 선두가 고정일때
● MIN(),MAX()
● ORDER BY, GROUP BY
인덱스가 사용 안 될 떄
● LIKE문이 와일드 카드(*)로 시작될때
● DB전체를 읽는것이 빠르다고 MySQL이 판단할때
● WHERE과 ORDER BY의 컬럼이 다를때에는 한쪽만 사용
Index가 사용되는지 확인 하는 방법
EXPLAIN 커맨드를 사용.
EXPLAIN은 mysql이 어떻게 판단해서 쿼리를 실행하는지 정보를 볼 수 있음.
사용법은 SELECT 앞에 EXPLAIN 을입력.
EXPLAIN 보는 방법
type를 확인
const
PRIMARY KEY 또는 UNIQUE 인덱스의 룩업에 따라 접근.최고속도.
eq_ref
JOIN 따른 PRIARY KEY 또는 UNIQUE KEY 가 이용되는 시점의 접근 타입. const와 비슷하지만 JOIN에서 사용되는 것이 다름.
ref
유니크(PRIMARY or UNIQUE) 가 없는 인덱스를 사용해서 등가 검색을(WHERE key = value) 실행할때 사용되는 접근 타임.
range
인덱스를 사용한 범위 검색
index
풀 인덱스 스캔.인덱스 전체를 스캔할 필요가 있기 때문에 매우 느림.
ALL
풀 테이블 스캔. 인덱스가 전혀 사용되지 않은 것을 의미.OLPT계의 처리에서는 개선이 필요.
댓글