-
(6) IndexCS 지식/○ Database 2021. 7. 3. 15:03
1. Index란?
참조:
https://korshika.tistory.com/93?category=963003
1-1) 목적
RDBMS에서 검색 속도를 높이기 위한 기술
Table의 Column(Attribute)을 색인화를 하여 저장( 다른 파일로 저장 )
→ B+Tree 구조를 사용하여 Index를 만듦
1-2) 장점
Index를 사용하는 table의 레코드 조회시 Full-scan하지 않아도 됨
1-3) 과정
(a) table 생성과 파일
Table생성시, MYD, MYI, FRM의 3 파일이 생성
- FRM (format[=schema] file)
테이블 구조가 저장되어이 있는 파일 - MYD (mysql data)
실제 데이터가 있는 파일 - MYI (mysql index)
Index 정보가 들어가있는 파일
(b) index
Indexing을 table에 추가하는 경우 MYI 파일이 생성
(c) 쿼리 수행
사용자가 조회하는 쿼리를 해당 table에서 사용할 경우, 해당 Index를 사용하여 Select 등을 수행하면
MYI에서 레코드 검색을 하게 됨
1-4) 단점
- Index 생성시 .mdb(데이터베이스 파일) 파일 크기가 증가
- 한 페이지를 동시에 수정할 수 있는 병행성이 줄어듦
- Index 된 필드의 데이터 업데이트나, 관련된 레코드 추가/삭제시 성능이 떨어짐
- 데이터 변경이 자주 일어나는 경우 Index가 매번 같이 업데이트 되므로 성능에 영향을 미침
2. Index 사용
2-1) 상황
(a) 사용하면 좋은 경우
- Where 절 / Order By 에서 자주 사용되는 Column
- 외래키가 사용되는 Column
- Join에 자주 사용되는 Column
- DB가 커서 full-scan시 성능 저하가 있을 수 있는 경우
- Insert / create, update, delete가 자주 발생하지 않는 컬럼(** 이것이 DML)
- 데이터 중복도가 낮은 Column -> indexing 결과가 다중으로 나오므로
(b) 사용을 피하는 경우
> (a) 의 반대 상황에 놓여있는 경우 해당
- 데이터 중복도가 높은 Column
- DML이 자주 일어나는 Column
※ DLM : Data Lifecycle Management
3. DML (Data Manipulation Language)
> Index 컬럼에 대해 DML이 일어나는 경우 다음과 같은 추가 절차를 따름
- INSERT
기존 Block에 여유가 없을 때, 새로운 Data가 입력됨
-> 새로운 Block을 할당 받은 후, Key를 옮기는 작업을 수행 (**많은 양의 Redo가 기록**되고, 유발)
-> Index split 작업 동안, 해당 Block의 Key 값에 대해서 DML이 블로킹 됨... 대기 이벤트 발생 - DELETE
[Table과 Index 상황 비교]
Index에서 Data가 delete 되는 경우 : Data가 지워지지 않고, 사용 안 됨 표시만 해둠.
Table에서 data가 delete 되는 경우 : Data가 지워지고, 다른 Data가 그 공간을 사용 가능
-> Table의 Data 수와 Index의 Data 수가 다를 수 있음. - UPDATE
Table에서 update가 발생하면 -> Index는 Update 할 수 없음.
Index에서는 Delete가 발생한 후, 새로운 작업의 Insert 작업 / 2배의 작업이 소요되어, 힘듬
참조
https://gyoogle.dev/blog/computer-science/data-base/Index-.html
반응형'CS 지식 > ○ Database' 카테고리의 다른 글
(8) 트랜잭션 격리 수준 (0) 2021.07.07 (7) DB Transaction (0) 2021.07.07 (5) SQL Anomaly (0) 2021.07.03 (4) SQL vs NO-SQL (0) 2021.07.02 (3) SQL Injection (0) 2021.07.02 - FRM (format[=schema] file)