데이터 베이스
파일처리 시스템의 문제점
- 파일 처리 시스템은 파일마다 필요한 데이터를 각 가지고 있기때문에 시간과 노력, 경제비용에 효율성 이떨어졌다.
- 데이터의 변경사항이 발생하면 각 파일의 데이터를 모두 변경해야하는 무결성 문제가 있었다.
- 기존 파일 시스템은 특정 용도 만을 위해 제작되기 때문에 다른 프로그램 사용시에 새로 만들어야한다.
- 데이터의 양식과 파일이 다양하기때문에 검색이나 추가 작업이 어렵다.
데이터 베이스
🤟🏻 등장목적 : 파일 시스템의 문제점을 해결 하기 위한 목적
🤟🏻 어떤 업무 필요한 다양한 데이터를 모아놓는 집합체
🤟🏻 DB관리 시스템 : 오라클,MYSQL,DB2
데이터 베이스의 장점
- 공유성 : 여러면이 데이터를 동시에 공유 할 수 있다.
- 중복의 최소화 : 여러 프로그램이 접근 가능해서 경제성과 조작성이 있다.
- 변화의 적응 :데이터의 무결성을 유지하기가 쉽다.
- 보안성:분산된 서비스가 아니라 중앙 집중형이기때문에 부안성,보안 비용 절감
데이터 베이스관리 시스템의 특징
정의:저장할 구조를 정의해야하며, 정의된 구조에 따라 저장해야한다.
조작:사용자가 삽입,삭제, 갱신이 가능하다.
제어:데이터 베이스의 정확성과 안정성을 위해 일정한 형식을 필터링 하여 저장하거나, 여러명이 데이터를 동시 공유할 수 있다.
인덱스
데이터 베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주기 위해 추가적인 쓰기 작업와 작업 공간을 활용한 자료구조이다.
인덱스를 사용하는 이유
- WHERE 구문과 일치하는 열을 빨리 찾기 위함
- 열을 빨리 제거 하기 위해서.
- 조인 (join)을 실행할 때 다른 테이블에서 열을 추출하기 위해서.
- 특정하게 인덱스된 컬럼을 위한 MIN() 또는 MAX() 값을 찾기 위해서.
- 키의 최 좌측 접두사 (leftmost prefix)를 가지고 정렬 및 그룹화를 하기 위해서.
- 데이터 열을 참조하지 않는 상태로 값을 추출하기 위해서 쿼리를 최적화 하는 경우에
만일, Index를 사용하지 않은 컬럼을 조회 해야한다면 전체를 탐색하는 Full Scan(전체 비교 탐색)을 수행해야 한다.
인덱스 관리
index를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠른 탐색이 가능하다.
만일 인덱스가 적용된 컬럼에 INSERT, UPDATE, DELETE가 수행 된다면, 다음과 같은 연산을 추가적으로 해야한다.
- INSERT: 새로운 데이터에 대한 인덱스를 추가함
- DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
- UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함
따라서 오버헤드가 발생한다.
인덱스의 장점과 단점
장점
- 테이블을 조회하는 성능을 향상
- 전반적인 시스템의 부하를 줄일 수 있음
단점
- 인DB의 약 10%에 해당하는 저장공간이 필요
- 인덱스를 관리하기 위해 추가 작업필요
- 인덱스를 잘못 사용할 경우 오히려 성능이 저하된다.
예를 들어 CRUD가 빈벅한 속성에 인덱스를 걸면 성능이 오히려 저하되는 효과가 발생한다.인덱스 방식은 삭제 시 '진짜 삭제'가 아닌 '사용하지 않음'모드로 변경 되기때문에 데이터는 10만건이지만 인덱스는 100만 건이 넘어가게 되어, 비대해진 인덱스에 의해 성능이 떨어질 수 있다.
따라서, 규모가 크고 ,JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼, 중복도가 낮은 컬럼에 적합하다
인덱스의 자료 구조
인덱스를 만들기 위한 다양한 자료구조가 있는데, 크게 해시 테이블과 B+Tree가 있다.
해시 테이블
해시 테이블은 (Key, Value)로 데이터를 저장하는 자료구조 중 하나로 빠른 데이터 검색이 필요할 때 유용
해시가 등호(=) 연산에만 특화되었기에 해시 함수는 값이 1이라도 달라지면 완전히 다른 해시 값을 생성하는데, 부등호 연산(>, <)이 자주 사용되는 데이터베이스 검색을 위해서는 해시 테이블이 적합하지 않다.
B+Tree
DB의 인덱스를 위해 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조이다.모든 노드에 데이터(Value)를 저장했던 BTree와 다른 특성을 가지고 있다.
B+Tree 의 특징
- 리프노드(데이터노드)만 인덱스와 함께 데이터(Value)를 가지고 있으며 나머지 노드(인덱스)들은 데이터를 위한 인덱스 Key를 갖는다.
- 리프노드들은 LinkedList로 연결되어있다.
- 순차검색을 용이하게 하는 등 B-Tree를 인덱스에 맞게 최적화하였다
- Best Case에 대해 리프노드까지 가지 않아도 탐색할 수 있는 BTree에 비해 무조건 리프노드까지 가야한다는 단점도 있다
- 순차검색을 용이하게 하는 등 B-Tree를 인덱스에 맞게 최적화하였다
왜 b-tree를 사용하는지?
SELECT 질의 조건에는 부등호 연산(<>)도 포함된다.
hash table은 동등 연산에 특화된 자료구조이기 때문에 부등호 연산 사용 시 문제 발생하기 때문
'Tech.log > 데이터베이스' 카테고리의 다른 글
[Statement VS Prepared Statement] (0) | 2021.05.22 |
---|---|
[트랜잭션이란?] (0) | 2021.05.22 |
[정규화] (0) | 2021.05.21 |
[Primary index vs Secondary index vs Composite index] (0) | 2021.05.21 |
[ DB ] 관계 데이터 모델 (3) | 2021.04.24 |
댓글