데이터베이스

DATABASE STEP 35 - INDEX

2023. 3. 30. 19:51
728x90

★ 인덱스(Index)

  • 검색을 빠른 속도로 하기 위해서 사용하는 도구
  • 도서의 색인과 동일한 역할 > 수많은 내용 중 원하는 걸 빠르게 찾기 위한 도구
  • SQL 명령 처리 속도를 빠르게 하기 위해서, 특정 컬럼에 대해 생성되는 도구

★ 데이터베이스 상태

  • 테이블내의 레코드 순서는, 개발자가 원하는 정렬 상태가 아니다.
  • 어떤 데이터 검색 > 처음 ~ 끝까지 차례대로 검색 > Table Full Scan
  • 특정 컬럼 선택 > 별도의 테이블에 복사 > 미리 정렬(***) >> 인덱스

■ 인덱스 장단점

  • 장점 : 검색 처리 속도를 향상 시킨다.
  • 단점 : 너무 많은 인덱스 사용은 전체적인 DB 성능을 저하시킨다.

■ 자동으로 인덱스가 걸리는 컬럼

  • 1. primary key
  • 2. Unique
  • 테이블에서 PK 컬럼을 검색하는 속도 > 테이블에서 일반 컬럼을 검색하는 속도

■ 인덱스를 사용하는 경우

  • 1. 테이블에 데이터(행)가 많은 경우 
  • 2. where 절에 사용되는 횟수가 많은 컬럼에 적용(*********)
  • 3. join에 조건으로 사용되는 컬럼에 적용 > 복합인덱스(PK,FK)
  • 4. 인덱스의 손익 분기점 > 검색 결과가 10~15% 이하인 경우
  • 5. null을 포함하는 경우 > null 인덱스에서 제외

■ 인덱스를 사용하지 말아야 하는 경우

  • 1. 테이블에 데이터(행)가 적은 경우(의미없음)
  • 2. 인덱스의 손익분기점 > 검색 결과가 15% 이상일 경우
  • 3. 해당 테이블에 데이터 삽입/수정/삭제가 빈번할 경우(**********)

■ 인덱스 사용 ex)

  • ex1)
create table tblIndex
as
select * from tblInsa;

select count(*) from tblIndex; --3,801,088 

insert into tblIndex select * from tblIndex;

-- 시간 확인
set timing on;

-- SQL 실행
-- 1. Ctrl + Enter > 결과 > 테이블 출력
-- 2. F5             > 결과 > 텍스트 출력
select * from tblInsa;

-- 인덱스 없이 검색
select distinct name from tblIndex where name = '홍길동';

-- name > 인덱스 생성 > 경과시간 : 23초 
create index idxName 
    on tblIndex(name);
    
-- 인덱스 검색 > 경과 시간 : 0.02초
select distinct name from tblIndex where name = '홍길동';

 

■ 인덱스 종류

  • 1. 고유 인덱스
    • 색인의 값이 중복이 불가능하다.
    • PK, Unique > 컬럼을 인덱스로 생성하면 고유 인덱스가 된다.
create unique index idxName on tblIndex(name);
  • 2. 비고유 인덱스
    • 색인의 값이 중복이 가능하다.
    • 일반 컬럼
  • 3. 단일 인덱스
    • 컬럼 1개를 대상
create index idxBuseo on tblIndex(buseo);

select * from tblInsa;

select count(*) from tblIndex where buseo = '기획부';

select count(*) from tblIndex where name = '유관순' and buseo = '영업부';

select count(*) from tblIndex where jikwi = '부장' and name = '홍길동';
  • 4. 복합 인덱스
    • 검색을 2개 이상의 컬럼을 대상으로 할 때
create index idxNameBuseo on tblIndex(name, buseo); 

select count(*) from tblIndex where name = '유관순' and buseo = '영업부';
select count(*) from tblIndex where buseo = '영업부' and name= '유관순';
  • 5. 함수 기반 인덱스
create index idxSsn on tblIndex(ssn);
create index idxSsn2 on tblIndex(substr(ssn, 8, 1));

select count(*) from tblIndex where substr(ssn, 8, 1) = '1';
728x90
저작자표시 비영리 변경금지 (새창열림)

'데이터베이스' 카테고리의 다른 글

DATABASE STEP 37 - JDBC  (0) 2023.03.30
DATABASE STEP 36 - ACCOUNT  (0) 2023.03.30
DATABASE STEP 34 - TRIGGER  (0) 2023.03.29
DATABASE STEP 33 - STORED FUNCTION  (0) 2023.03.29
DATABASE STEP 32 - PROCEDURE  (0) 2023.03.28
'데이터베이스' 카테고리의 다른 글
  • DATABASE STEP 37 - JDBC
  • DATABASE STEP 36 - ACCOUNT
  • DATABASE STEP 34 - TRIGGER
  • DATABASE STEP 33 - STORED FUNCTION
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
Developer Story HouseIT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • css
  • 정보보안전문가
  • 자바
  • JavaScript
  • 백엔드
  • DB
  • IT개발자
  • 프론트엔드
  • React
  • 정보처리기사
  • 코딩테스트
  • 알고리즘
  • DBA
  • it
  • IT자격증
  • html
  • java
  • jquery
  • 개발자
  • 앱개발자
  • 정보처리기사필기
  • IT자격증공부
  • 개발블로그
  • ajax
  • 백준
  • 웹개발자
  • jsp
  • 데이터베이스
  • 웹페이지
  • 웹개발

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
DATABASE STEP 35 - INDEX
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.