Index

9mond·2023년 7월 26일
0
post-thumbnail
post-custom-banner

1. index란

  • 조회 속도를 향상시키기 위한 데이터베이스 검색 기술
  • 색인이라는 뜻으로 해당 테이블의 조회 결과를 빠르게 하기 위해 사용. 목차 정도의 의미?
  • 즉, index가 필요한 이유는 index를 생성해 줌으로써 조회 속도를 빠르게 할 수 있다.

2. index의 내부구조

  • index를 테이블의 특정 컬럼에 한 개 이상 주게 되면 index table이 따로 만들어지고, index 컬럼의 row 값rowid 값이 저장되며 row 값은 정렬된 트리 구조로 저장시켜 두었다가 검색시 좀 더 빠르게 해당 데이터를 찾는데 도움을 준다.
    (rowid는 테이블을 생성하고 컬럼을 만든 후 데이터를 삽입하면 하나의 row가 생성되며, 이는 절대적인 주소를 가지게 되는데 이를 rowid라 한다.)
  • DML명령을 사용할 때는 원본 table은 물론, index table에도 데이터를 갱신시켜 주어야 하기 때문에, update, insert, delete 명령을 쓸 떄 속도가 느려진다.
  • 데이터가 많이 쌓일 것이라고 예상되는 경우 혹은 많이 쌓여 있어 현재 화면에서 조회 속도가 너무 느릴 떄 index 생성을 한다.

3. 반대로 index 생성이 불필요한 경우

  • 데이터가 적은(수 천 건 미만) 경우에는 인덱스를 설정하지 않는 게 오히려 성능이 좋다.
  • 조회보다 삽입, 수정, 삭제 처리가 많은 테이블

4. index의 취약점

  • 새로운 insert가 생성되면 index table에도 insert가 된다.
  • delete가 발생되면 index table에서 데이터를 지우지 않고 사용하지 않음으로 표시하게 된다.
  • update를 하게 되면 index table에서 delete를 한 후 새로운 데이터를 insert 작업한다.

5. index 생성

  • unique index : index를 사용한 컬럼의 중복값들을 포함하지 않고 사용할 수 있는 장점이 있다.
	create unique index 인덱스명
	on 테이블(컬럼);
  • non-unique index : index를 사용한 컬럼에 중복 데이터 값을 가질 수 있다.
	create index 인덱스명
	on 테이블(컬럼);

/ index /

CREATE TABLE EMPLOYEES3  AS SELECT * FROM EMPLOYEES e ;
SELECT * FROM EMPLOYEES3 e ;

SELECT rowid, EMPLOYEE_ID 
FROM	EMPLOYEES3 e 
;
INSERT INTO EMPLOYEES3 e (EMPLOYEE_ID, FIRST_NAME, LAST_NAME)
VALUES (100, 'Ismael', 'Chen');
SELECT * FROM EMPLOYEES3 e WHERE EMPLOYEE_ID  = 100;

-- unique index 생성
CREATE UNIQUE INDEX idx_employee3_id
ON employees3(employee_id);

DELETE FROM EMPLOYEES3 e 
WHERE FIRST_NAME = 'Ismael'
AND LAST_NAME = 'Chen';

-- index
INSERT INTO EMPLOYEES3 e (EMPLOYEE_ID, FIRST_NAME, LAST_NAME)
VALUES (500, 'Ismael', 'Chen');
SELECT * FROM EMPLOYEES3 e  WHERE FIRST_NAME = 'Ismael';

CREATE INDEX idx_employee3_first
ON employees3(first_name);
profile
개발자
post-custom-banner

0개의 댓글