-
index (인덱스)란?일차 TIL 2023. 5. 23. 22:47
1. Index란?
추가적인 쓰기 작업과 공간을 활용 하여 데이터 베이스 테이블의 검색 속도를 향상 시키기 위한 자료 구조
만약 우리가 책에서 원하는 내용을 찾고싶다면, 책을 전부 처음부터 전부 읽진 않을 것이다.
보통 맨 앞쪽에 색인(index)를 보고 찾아 갈 것이다.
인덱스를 황용하면, 데이터를 조회하는 SELECT 외에 UPDATE나 DELETE의 성능이 함께 향상된다.
해당연산을 수행하려면 대상을 조회해야만 작업을 할 수 있는데,
index를 사용 하지 않을 컬럼을 조회해야하는 상황이라면 전체를 탐색하는 Full Scan을 수행해야한다.
ex)
name age gender from "car" 47 "male" "Korea" "von" 31 "male" "USA" "linne" 38 "female" "Sweden" ~ ~ ~ ~ 이러한 값의 데이터가 에서 SELECT * WHERE age =31
을 구한다면 하나 씩 비교를 하며 값을 찾을 것이다.
행이 많다면 그만큼 더 많은 시간이 소모 될 것이다.
ex ) age 가 10 ~ 90 까지 있다면 하나씩 비교 가아닌
age < 50 이것이 맞다면 age > 25 이런 소거법을 사용한다면 훨씬 빠르게 답을 도출해 낼 수 있다.
이렇게 하기위해선 일단 age 가 정렬이 되어있어야 하는데
age 31 38 47 컬럼을 복사한뒤 정렬을 한것.
이것이 index 이다.
2. 추가로 알아 본것
데이터 베이스에서 의 index
4 5 1 3 2 1 2 3 4 5 이런 식의 물리적 이동은 좋지 않음

Binary Search Tree tree 형식으로 연결만 시켜 놓는다.
Binary Search Tree 라고 부른다
숫자가 있는 박스를 node 라고 부르는 데

node에 데이터를 하나만 넣는 것이 아닌 여러개를 넣는 다면

B-tree 성능을 더욱 강화 시킬 수있다.
여기서 끝이 아니다.
알아보던중 tree의 최종 판이라고 할 수있는 형태가 있던 것이다.
더욱 성능이 강화 된 것이다.

B+Tree 맨 아래의 node 끼리 연결이 되어 있다.
그로 인해 범위 검색이 쉬워진다. ex(3~ 8까지)
3. 정리
index 가없는 경우 모든 행을 다 뒤짐
index 가 있는 경우
1. index 에서 원하는 값을 빠르게 찾을 수있음
2. index와 연결된 원래 테이블 행을 가져옴
3. index 관리를 위해 추가 저장공간이 필요하다.
4. 느낀점
데이터 베이스끼리 병렬적으로 연결을 성공 시킬 수 있다면 더 성능이 좋고 빠른 데이터 베이스를 만들 수 있지 않을까? 라는 생각을 해보았다.
정확히 더 찾아 보진 못했지만 db의 종류중 NoSQL이 내가 생각 한 방식과 비슷한 것 같아 보였다.
다음번에 재대로 확인을 해봐야겠다.
'일차 TIL' 카테고리의 다른 글
[자바스크립트]Boolean 의 필요성 (2) 2023.05.28 논리 연산자 || (0) 2023.05.26 23-05-15 ~ 23-05-19 프로젝트 KPTF (0) 2023.05.19 CRUD란? (0) 2023.05.19 html 간 페이지 이동 (0) 2023.05.17