SQL - INDEX

김규린·2024년 8월 24일
0

Data Base

목록 보기
18/20

1. INDEX

  • 인덱스(Index)는 데이터 검색 속도를 향상시키는 데이터 구조로 데이터를 빠르게 조회할 수 있는 포인터를 제공함
  • 데이터베이스에서 데이터를 찾을 때 전체 테이블을 검색하는 대신 인덱스를 통해 검색을 하므로 속도가 더 빨라지게 됨
  • 인덱스는 주로 WHERE절의 조건이나 JOIN 연산에 사용되는 컬럼에 생성함
  • 다만 인덱스도 데이터 저장 공간을 차지하고 데이터가 변경될 때마다 인덱스 역시 갱신해야 하기 때문에 어떤 컬럼에 인덱스를 생성할지는 신중히 결정해야 함
  • 데이터베이스에서 데이터의 위치 정보를 가진 일종의 주소록

  • 인덱스 개념이 없을 경우 full scan을 해야 한다.
  • 수정이 잦은 컬럼에는 인덱스를 붙이면 안된다.
  • 인덱스 할 경우 내부적으로 정렬을 한다. → 그래서 자주 갱신해줘야 함

  • ROWID이다.
  • ROWID는 데이터 주소

1. 인덱스 생성

CREATE TABLE phone (
    phone_code INT PRIMARY KEY,
    phone_name VARCHAR(100),
    phone_price DECIMAL(10, 2)
);

INSERT 
  INTO phone (phone_code , phone_name , phone_price )
VALUES 
(1, 'galaxyS23', 1200000),
(2, 'iPhone14pro', 1433000),
(3, 'galaxyZfold3', 1730000);

SELECT * FROM phone;
  • 기본 조회
SELECT * FROM phone WHERE phone_name = 'galaxyS23';
  • 조회의 실행계획 확인
EXPLAIN SELECT * FROM phone WHERE phone_name = 'galaxyS23'; 
-- extra를 확인하면 where 절을 활용하여 추출했다.
  • phone_name 컬럼에 idx_name이라는 이름의 인덱스 생성 후 확인
-- where 절에 활용한 컬럼에 index를 추가해 보자.
CREATE INDEX idx_name ON phone (phone_name);

SHOW INDEX FROM phone;
  • 2개 이상의 컬럼을 한번에 하나의 인덱스로 설정해서 생성할 수 있다.
CREATE INDEX idx_name_price ON phone (phone_name, phone_price);

SHOW INDEX FROM phone;

중복값이 적은 컬럼을 앞에다가 적어야 함

2. 인덱스 활용

  • 인덱스 하나에 컬럼 하나씩 연결되어 있다.

  • EXPLAIN 명령어로 쿼리 실행 계획 확인(인덱스 사용 여부 및 사용 컬럼 확인)
-- 인덱스 추가 후 다시 해당 컬럼을 조건으로 해서 조회
EXPLAIN SELECT * FROM phone WHERE phone_name = 'iPhone14pro';
  • MySQL의 InnoDB 엔진을 사용하는 경우에는 OPTIMIZE TABLE 명령을 사용하여 테이블과 인덱스를 최적화할 수 있다.
-- 인덱스는 주기적으로 다시 달아주어야 한다.
OPTIMIZE TABLE phone;

3. 인덱스 삭제

인덱스 삭제는 drop

DROP INDEX idx_name ON phone;
SHOW INDEX FROM phone;
profile
나는 할 수 있다...!

0개의 댓글