[sql] Index

sesame·2021년 8월 20일
0

sql

목록 보기
12/24

Index(색인)

인덱스의 역할: 검색속도의 향상!

  • 인덱스는 테이블과는 별개의 독립된 객체로 작성되지만 테이블에 의존적이다.
  • PK이거나 UNIQUE 제약조건이 지정되면 따로 인덱스를 생성하지 않더라도 해당 키에 대한 인덱스가 자동으로 생성된다.

✨인덱스 필요한 경우

  • 테이블 행 수 많을 때
  • WHERE문에 특정 컬럼이 많이 사용될 때
  • 검색 결과가 전체 데이터의 2~4%정도일 때
  • JOIN에 자주 사용되는 컬럼
  • NULL을 포함하는 행이 많은 컬럼일 때

🤔인덱스가 불필요한 경우

  • 데이터가 적을 때(수천건 미만)
  • SELECT 보다 INSERT, UPDATE, DELETE 많이 사용하는 테이블일 때
  • 조회 결과가 전체행의 15%이상 조회할 것으로 예상될 때

1. Index 생성

> 단일 컬럼 고유 인덱스 생성

중복되지 않는 데이터를 인덱스 키값으로 지정

CREATE UNIQUE INDEX 인덱스명 ON 테이블명(속성명);

> 단일 컬럼 비고유 인덱스 생성

중복되는 데이터를 인덱스 키값으로 지정

CREATE INDEX 인덱스명 ON 테이블명(속성명);

> 함수 기반 인덱스

인덱스 이용하려면 WHERE절의 조건을 다른 형태로 가공하면 안된다.
ex) WHERE price+1000
이러한 인덱스를 생성하고 싶다면 함수기반 인덱스를 사용해야한다!
단점: 인덱스를 사용하면 속도가 향상되지만 DB 성능향상의 근본적 해결방법이 아니기 때문에 쿼리 조건이 바뀌면 인덱스를 다시 생성해야한다😭

CREATE INDEX price_increase ON 테이블명(price+1000);

> 결합 인덱스

두개 이상의 컬럼을 합쳐 인덱스를 생성하는 인덱스로 WHERE 절의 조건 컬럼이 2개 이상 AND로 연결되어있을 때 많이 사용한다.

복합키??

CREATE INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);

> BITMAP 인덱스

데이터의 종류가 적고 동일한 데이터 많을 때 사용
ex) gender - f,m
🚨BITMAP 인덱스 생성 후 컬럼값이 새로 생기면 인덱스를 전부 수정해야한다....

CREATE BITMAP INDEX 인덱스명 ON 테이블명(컬럼명);

2. Index 제거

DROP INDEX 인덱스명;

3. Index 재생성

ALTER INDEX 인덱스명 REBUILD;

4. Index 조회

--USERT_INDEXES 뷰를 이용해 조회
SELECT table_name, index_name, index_type
FROM user_indexes
WHERE table_name = '테이블명';

0개의 댓글