CS/DB(9)
-
clustered Index vs non-clustered Index (MYSQL기준)
clustered Index 특정 나열된 데이터들을 일정 기준으로 정렬해주는 인덱스이다. (ex: 영어사전) 그래서 클러스터형 인덱스 생성 시에는 데이터 페이지 전체가 다시 정렬된다. 하지만, 이러한 정렬 특징 때문에, 이미 대용량의 데이터가 입력된 상태라면 클러스터형 인덱스 생성은 심각한 시스템 부하를 줄 수 있다. 한개의 테이블에 한개씩만 만들 수 있다. (ex: pk) 본래 인덱스는 생성 시, 데이터들의 배열정보를 따로 저장하는 공간을 사용하나, 클러스터 인덱스는 따로 저장하는 정보 공간을 적게 사용하면서 테이블 공간 자체를 활용한다. 인덱스 자체의 리프 페이지가 곧 Data이기 때문에, 인덱스 자체에 데이터가 포함되어있다고 볼 수 있다. 보조 인덱스(non-clustered Index)보다 검색 ..
2024.02.21 -
인덱스로 BTree계열이 자주 사용되는 이유
인덱스로 BTree계열이 자주 사용되는 이유 BTree, AVL Tree, Red-Black-Tree 시간복잡도 BTree Binary Search Tree(BST)를 일반화한 트리 Self-Balancing BST BST중에서 한쪽으로 치우치는 것이 있는데, 이를 보완하기 위해 스스로 규형을 잡는 트리인 AVL트리, RedBlackTree가 있다. 세개 모두 시간복잡도가 O(logN)인데 왜 굳이 BTree를 DB INDEX로 자주 쓰일까? 위를 이해하기 앞서, computer system을 이해할 필요가 있다. computer system computer system에는 총 3가지로 나눠서 설명할 수 있다. cpu 프로그램 코드가 실제로 실행되는 곳 main memory(RAM) 실행 중인 프로그램의..
2024.02.02 -
DB Index(MySQL기반)
DB Index(MySQL기반) 위 그림에서 보다시피, 인덱스를 사용하지 않는다면, first_name이 "Minsoo"인 사람들을 full scan하여서 결과값을 추출해야한다. first_name에 index가 걸려있었다면? full scan이 아닌 O(logN) (B-tree based index)의 시간이 소요될 수 있다. 즉, B-tree기반의 인덱스라면 O(logN)의 시간이 소요될 수 있다. 따라서, index를 사용하는 이유를 아래와 같이 정의할 수 있다. Index를 쓰는 이유 조건을 만족하는 튜플들을 빠르게 조회하기 위해! 위 그림은, index에 대한 쿼리문을 작성한 것이다. 첫번째 쿼리문은, name attribute가 중복을 허용하기때문에 UNIQUE INDEX가 아닌 INDEX키워..
2024.01.19