My Space

INDEX(MySQL)

2023. 1. 29. 14:16
반응형

테이블 인덱스 조회/생성/삭제

-- index 확인
SHOW INDEX FROM 테이블명;

-- index 생성
CREATE INDEX 인덱스명 ON 테이블명(컬럼명);
ALTER TABLE 테이블명 ADD INDEX 인덱스명(컬럼명);

-- index 삭제(수정은 삭제->생성으로 해야함)
ALTER TABLE 테이블명 DROP INDEX 인덱스명;

쿼리에 사용중인 인덱스 확인(쿼리앞에 EXPLAIN 추가)

EXPLAIN
SELECT * FROM CUSTOMER WHERE TEL = '01000000000';

index가 여러개 존재 할 경우, possible_keys 필드에 여러개가 나열될 것이고 실제로 사용된 index는 key필드의 값으로 나타난다.

이때, 여러개의 index 중 사용되는 index는 DB의 optimizer가 알아서 적절하게 선택한다.

 

※ MySQL에서는 index없는 unique를 생성 할 수 없다.

즉, unique를 부여하면 index가 생성된다.

필드 하나에 unique속성을 추가하면 자동으로 UNIQUE INDEX 추가.

 

불필요한 index는 생성하지 말자

- table에 데이터가 변경될 때마다 index도 변경 발생(b-tree 구조변경)

- 추가적인 저장공간 차지(인덱스 마다 별도의 저장공간을 가지고 있다)

 

Covering index

- 조회하려는 필드(attribute)를 index가 모두 포함하는 경우.

ex) CUSTOMER이라는 테이블에 INDEX(name, tel) 이와 같이 두개의 필드에 대해 인덱스가 걸려있는 경우 아래와 같은 쿼리를 실행하면 조회 성능이 더 좋다.

SELECT NAME, TEL FROM CUSTOMER
WHERE NAME = '홍길동';

 

'Development > DB' 카테고리의 다른 글

집계함수 안에서 조건 부여  (0) 2022.08.31
MySQL auto_increment 값 변경  (0) 2022.01.11
EXISTS, NOT EXISTS 사용  (0) 2021.11.22
[MyBatis] MySQL의 DUPLICATE  (0) 2021.10.27
오라클 Keep 함수  (0) 2021.07.11

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading