'2011/08/09'에 해당되는 글 2건

  1. 2011.08.09 8장 storage and indexing Overview
  2. 2011.08.09 5장 SQL
공부/데이터베이스2011. 8. 9. 23:45


레코드들이 어떻게 파일로 구성되느냐에 따라 DBMS의 성능이 달라진다.
인덱스는 search key로 record id를 찾을 수 있게 해주는 자료구조이다.
버퍼메니져가 disk로 부터 페이지를 메모리로 fetch한다. file, index layer가 버퍼메니저에게 요청.


파일구성 방법
힙 파일:  순서가 렌덤하게 레코드들이 파일에 저장. 모든 레코드들을 스캔할때 적절한 방법.
sorted files: 레코드들을 순서대로 접근할 때 좋은 방법.
인덱스 : 레코드들을 트리나 해쉬로 구성. search key 필드로 검색할 때 효율적인 검색이 가능하다. sorted files보다 레코드 삽입, 수정, 삭제가 빠르다.

인덱스
search key에 의해 파일 접근을 빠르게 할 수 있다.
search key는 relation의 field들의 subset이다.
search key는 key(primary key, candidate key)와는 관련이 없다. 즉 unique하지 않을 수 있다.

data entry
data entry : 인덱스 파일에 저장되어 있고. 이걸로 데이터 레코드를 찾을 수 있다.
data entry를 저장하는 세가지 방법.
1. key value와 data record로 구성.
2. key value와 data record id로 구성.
3. key value와 data record id의 list로 구성.
1번 방법으로는 index를 하나밖에 이용 못한다. 아니면 레코드데이터가 중복되어야 한다. 레코드데이터가 크면 페이지 많이 차지한다.
2번과 3번은 data entry가 데이터레코드의 포인터를 가지고 있기 때문에 파일 구성에 독립적이고, 1번보다 사이즈가 작다. 특히 3번은 2번보다 더 사이즈가 작지만 data entry들의 길이가 가변적이다.(search key가 고정 사이즈이더라도!)

인덱스 분류
primary index : primary key를 포함하는 search key.
secondary index : 그 외 인덱스들
unique index: candidate key를 포함하는 search key.

clustered : 데이터 레코드의 순서가 그 파일의 인덱스의 데이터 엔트리 순서와 비슷하거나 같도록 구성할 때.
1번은 clustered.
2번을 사용했을 때 clustered로 만들어주려면 heap 파일 정렬. 레코드가 삽입될 때 overflow 페이지가 필요할수도 있다. 그래서 data 레코드들이 완전히 sort되어 있다고 말할 수 없고 sort에 가깝다라고 말할 수 있다.

Hash-based index
index는 bucket들의 모임
bucket: primary page하나랑 0개 이상의 overflow pages.
hash function으로 레코드가 속할 버켓을 구한다.
레코드의 search key값을 이용한다.

B+ tree
루트에서 단말 노드에 이르는 모든 경로의 길이가 같은 인덱스 구조.
leaf page는 data entry를 포함하고, 양옆의 leaf들과 연결되어 있다.
non leaf page는 index entry들을 포함하고 찾는 data entry가 어디있는지 알려준다.
fan-out : 비단말노드에서 자식의 평균 수.
fan-out이 클 수록 빨리 찾을 수 있다. index entry 사이즈가 작을 수록 fan-out이 커진다.


 

'공부 > 데이터베이스' 카테고리의 다른 글

Tree-Structured index  (0) 2011.08.15
Disks and files  (0) 2011.08.15
5장 SQL  (0) 2011.08.09
2장 introduction to Database Design  (0) 2011.08.06
9. 서브 쿼리 (subqueries)  (0) 2011.07.19


Posted by skyjumps
공부/데이터베이스2011. 8. 9. 20:27


UNION : 합집합
INTERSECT : 교집합
EXCEPT : 차집합
위 세개는 중복이 포함되지 않는다.

IN : A IN B, A가 B에 속하면
NOT IN: IN 반대.

EXISTS : IN과 비슷. 서브쿼리의 결과가 공집합인지 아닌지 점검. 아니면 서브쿼리 결과를 바탕으로 메인쿼리 재계산.
UNIQUE: 서브쿼리의 인스턴스의 튜플의 갯수가 2개이상이 아닌지 검사. 하나이거나 0개일 때 TRUE.

ANY :  서브쿼리가 반환하는 튜플 중에 하나라도 만족하면 참.
ALL : 서브쿼리가 반환하는 모든 튜플을 만족하면 참.
IN과 ANY가 같고
NOT IN과 <>ALL이 같은 의미.
 
메인쿼리의 각 튜플에 대해 서브쿼리를 적용.

Group by : 그룹별로 묶기.
Having by : 조건을 만족하는 것들만 묶기.
group by를 사용할 때 select 절에 나오는 열이 group by절에 있는 열에 포함이 되어야 한다. 포함되지 않으면 그 열의 값이 여러개를 가질 것이고 select문에서 어떤 것을 출력해야 될지 모르므로. 키로 그룹을 묶으면 가능하다.

Outer join
equijoin에서 조건을 만족하지 못하는 튜플은 결과에서 못본다. 값이 없는 것도 결과에서 보기 위해 사용한다.
널값도 나올 수 있다.

테이블 제약 조건
한 행이 삽입되거나 수정될 때 check 제약 조건의 조건식이 계산된다.

도메인 제약조건
Integer같은 도메인을 정의할 수 있다.
 distinct type: 같은 Integer를 기반으로 하더라도 type이 다르면 비교를 못하도록 하기 위해 사용.

assertion
여러 테이블이 동시에 관련된 제약조건일 때 사용.

트리거
데이터베이스를 관찰하고 있다가 변경되면 자동으로 실행되는 프로시저.
 

'공부 > 데이터베이스' 카테고리의 다른 글

Disks and files  (0) 2011.08.15
8장 storage and indexing Overview  (0) 2011.08.09
2장 introduction to Database Design  (0) 2011.08.06
9. 서브 쿼리 (subqueries)  (0) 2011.07.19
8 조인과 다중테이블 연산  (0) 2011.07.19


Posted by skyjumps