티스토리 뷰

DB/정리

인덱스?

란텔 2022. 10. 24. 21:00

인덱스란?

 

인덱스란 SQL 조회의 처리 속도 향상을 위해 칼럼에 생성하는 객체

 

 

 

 

새로운 인덱스 생성하기

 

 

   CREATE INDEX 인덱스명

 

   ON 테이블이름(칼럼명);

 

 

 

테이블의 인덱스 확인하기

 

   SHOW INDEX FROM 테이블이름;

 

 

 

인덱스 제거

 

 

   DROP INDEX 인덱스명;

 

 

 

 

 

인덱스를 무조건 사용한다고 해서 검색속도가 빨라지는 것은 아니다. 맹목적인 인덱스 지정시 성능 저하의 요인이 될 수 있다.(보통 한 테이블에 4~5개 이상의 인덱스를 지정하는건 권장하는 방법이 아니다)

 

 

 

 

 

인덱스를 사용해야 할 경우

 

 

   - 테이블 행의 수가 많을 때

   - 검색 결과가 전체 데이터의 5%이내 일때

   - 컬럼에 대하여 변경보다 검색이 잦을 때

 

   - WHERE문에 해당 컬럼이 많이 사용 될 때

   - 컬럼값이 다양한 값을 지녔을 때

 

   

 

인덱스를 사용하면 검색 속도가 일정 부분 향상 되지만, 반대로 INSERT, UPDATE, DELETE 구문의 명령 처리가 비교적 느려진다.

 

 

 

CREATE TABLE BOOK(    BID INT NOT NULL,    BTITLE VACHAR(100),    BAUTHOR VARCHAR(50),    BISBN BIGINT,    BPAGE INT,    PRIMARY KEY(BID),    INDEX B_INDEX (BTITLE ,BAUTHOR, BPAGE) );  

하나의 인덱스는 최대 15개의 컬럼을 지정할 수 있다.

 

만약 위의 BOOK테이블과 같이 두 개이상의 컬럼이 같이 묶여 인덱스로 등록되어 있을 때..(이를 다중-컬럼 인덱스라 한다.)

MySQL은 다중-컬럼 인덱스 사용 시 WHERE의 검색 조건 컬럼이 다중-컬럼 인덱스가 가지고 있는 좌측의 컬럼들을 대상으로 하지 않고 있다면 인덱스를 사용하지 않는다.

 

 

 

예를 들어 위에 제시한 BOOK테이블의 B_INDEX라는 인덱스를 대상으로 검색을 할 때 (BTITLE)로 검색을 하거나 (BTITLE, BAUTHOR), 또는 (BTITLE, BAUTHOR, BPAGE)와 같이 검색을 해야 인덱스가 사용된 검색이 가능하다.

 
WHERE BTITLE='love';  WHERE BTITLE='love' AND BAUTHOR='jhone';  WHERE BTITLE='love' AND BAUTHOR='jhone' AND BPAGE > 200; 

^위 구문은 인덱스를 사용함.

 

WHERE BAUTHOR='jhone';  WHERE BAUTHOR='jhone' AND BPAGE > 200;  

^위 구문은 인덱스를 사용하지 않음.

 

 

 

 

 

또 인덱스를 사용하기 위해서는 검색하고자 하는 인덱스 그룹의 접두사가 반드시 AND여야 동작한다.

WHERE BTITLE='love' AND BAUTHOR='jhone' OR BTITLE='affair' AND BPAGE > 100; 

^위 구문은 인덱스를 사용

 

WHERE BTITLE='love' OR BAUTHOR='jhone'; 

^위 구문은 인덱스를 사용하지 않음.

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

[MY-SQL] DATE_FORMAT 함수 (날짜형식을 바꿔줌)  (2) 2022.10.25
무결성 제약조건  (0) 2022.10.24
DDL 문  (0) 2022.10.24
VIEW(뷰)  (0) 2022.10.24
[MYSQL] 데이터타입  (0) 2022.10.24
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday