INDEX 는 검색속도를 높이는 RDBMS의 기술인데 보통, SELECT 절에서의 WHERE 절에 들어 들어가는 컬럼, 또는 JOIN 에 자주 사용되는 컬럼 에 주로 사용한다.
일반적으로는 SQL서버에 데이터를 저장할 떄, 내부적으로 아무런 순서없이 Heap 영역에 저장하게 된다.
이 Heap 에서는 인덱스가 없는 테이블의 데이터를 찾을 때, 전체 데이터페이지의 처음 레코드부터 끝 페이지 마지막 레코드까지 모두 조회를 하게 된다. (= 이러한 검색을 풀 스캔(full scan) 또는 테이블 스캔(table scan) 이라고 함)
이러한 기존의 검색방식에서 검색속도 향상을 이유로 INDEX를 도입하게 된다. (트리 구조로 Range Scan)
- INDEX 생성
-- t_student 테이블 SCHEMA
CREATE TABLE t_student (
seq_no INTEGER PRIMARY KEY, -- sequence
id CHAR(14) NOT NULL, -- 주민번호
name VARCHAR(255) NOT NULL, -- 학생 이름
age INTEGER NOT NULL, -- 나이
grade INTEGER NOT NULL, -- 학년
ins_timestamp TIMESTAMP NOT NULL -- 가입 일시
)
-- single column index for id
CREATE INDEX si_id ON t_student (id);
-- single column index for name
CREATE INDEX si_name ON t_student (name);
-- multi column index for id, name
CREATE INDEX mi_id_name ON t_student (id, name);
-- multi column index for id, name, age
CREATE INDEX mi_id_name_age ON t_student (id, name, age);
여러 컬럼에 인덱스 설정하면 오히려 효율이 떨어지기 떄문에 몇몇 컬럼에만 인덱스 설정하는 편이다.
(보통 한 테이블당 3개~5개가 일반적)
좋은 INDEX 칼럼 기준
1. 카디널리티 높음 (컬럼이 갖고 있는 값들이 분포도가 넓고 중복도가 낮음)
2. 조회 활용도 높음 ( where의 대상 컬럼으로 많이 활용됨)
3. 선택도가 낮음 ( 한 컬럼이 갖고 있는 값으로 적은 row가 조회됨, 일반적으로 5%)
4. 수정빈도 낮음 ( 인덱스도 테이블이기 떄문에, 인덱스로 지정된 컬럼의 값이 바뀌면 인덱스테이블도 갱신되어야함 )
- Index가 DML에 미치는 영향
Index 는 주로 SELECT 쿼리에서 성능이 잘 나오고 그외 INSERT, DELETE, UPDATE 에서는 경우에 따라 다르지만 보통 성능이 저하된다. (특히 INSERT의 경우, 새로운 데이터가 추가되면서 인덱스가 설정되어 있던 컬럼의 테이블도 수정이 일어나 전체적인 DB성능이 저하됨)
스키마
오라클에서 스키마란 스키마 오브젝트(테이블,뷰,인덱스) 들의 집합을 말한다.
하나의 스키마는 데이터베이스 사용자에 의해 소유 될 수 있다.
하나의 데이터베이스에서 여러개의 스키마(외부)가 존재가능하다.
하나의 외부스키마를 여러 사용자가 공용 사용가능하다.
같은 데이터베이스에서도 서로 다른 관점을 정의할 수 있도록 허용한 것..
일반 사용자는 질의어를 이용해서 DB를 쉽게 이용할 수 있음.
'TIL' 카테고리의 다른 글
web/was 구분이유 / 퍼블리싱 / 앱에서 DB를 바로 붙이지 않는 이유 (0) | 2023.06.13 |
---|---|
[TIL] Vue 정리 (0) | 2021.11.05 |
마크다운(MarkDown) 사용법 (0) | 2021.10.04 |
Servlet , JSP, MVC Pattern , Spring (0) | 2021.10.03 |
운영체제 CS (0) | 2021.10.01 |
최근댓글