2012-09-17 3 views
3

RDMS는 B- 트리의 형태로 디스크에 테이블 데이터를 저장하며 테이블 인덱스는 B- 트리 형식으로 저장됩니다. 기본 키 인덱스가 왜 추가 구조입니까?

나는 기본 키 인덱스가 정의 된 기본 키에 대해 자동으로 생성되는 것을 읽을뿐만 아니라 언제든지 삭제 될 수 있음. 따라서 기본 키 인덱스는 테이블 데이터를 저장하는 데 사용되는 B- 트리 옆에 추가 구조가 있음을 의미합니다.

리소스를 낭비하지 않는 이유 - 모든 테이블 테이블이 기본 키 인덱스를 통해 유지되지 않는 이유는 무엇입니까?

그런 경우가 아니면 B- 트리 테이블 데이터를 저장하는 데 사용되는 순서는 무엇입니까?

답변

2

기본 키 인덱스를 명확히하기위한

덕분에 행이 유지되는 디스크의 위치를 ​​찾기위한 최적화입니다. 구조로서 PK는 전체 행이 아닌 PK 데이터 만 포함합니다.

데이터베이스의 경우 디스크에서 읽는 페이지 수와 캐시 수를 기준으로 성능이 자주 조정됩니다. PK 인덱스는 전체 테이블보다 작기 때문에 캐시에있을 확률이 높아지고 디스크에서 더 적은 블록을 읽고 더 적은 블록의 다른 테이블을 캐시에서 제거합니다. 따라서 중요한 성능 최적화입니다.

또한 테이블 데이터를 수정하는 동안 행은 잠겨 있습니다. 기본 키가 디스크의 테이블 데이터에서 스캔되는 경우 잠긴 행은 다른 모든 쿼리에 대한 액세스 속도를 저하시킵니다. 색인을 별도의 구조로 분리하면, 지시되는 행이 잠겨있는 동안에도 색인을 사용할 수 있습니다.

전반적으로 별도의 PK 구조는 고전적인 시간 - 공간 최적화입니다.

수정 테이블의 행 순서는 무엇입니까? 다음은 오라클에 대한 대답이지만 많은 데이터베이스에 적용 할 수 있습니다.

간단한 대답 : PK 인덱스 (및 다른 인덱스)가 중요한 이유로 행이 디스크에 정렬되지 않습니다.

긴 대답 : 기본 키 B- 트리 구조가 필연적으로 분류되는 동안

은 (B- 트리)는 테이블의 행은 테이블 공간에 흩어져있다. 이것을 이해하기 위해서는 다양한 데이터 구조를 드릴 다운해야합니다.

먼저 데이터베이스는 테이블 공간이라고하는 논리적 엔티티로 구조화됩니다. 테이블 공간은 하나 이상의 디스크에있는 하나 이상의 파일 공간입니다. 파일이 비어 있습니다. 테이블 공간이 가득 차면 (기술적으로 데이터가 임계 값에 도달 할 때) 테이블 공간을 자동으로 확장 할 수 있습니다. 또한 파일을 확대하여 수동으로 확장 할 수도 있습니다 ('extent'추가 또는 새 파일 추가). 테이블 공간은 디스크뿐만 아니라 여러 시스템에 걸쳐 클러스터 될 수 있습니다.

두 번째 : 테이블 스페이스는 하나의 테이블 또는 인덱스를 사용하기위한 각 세그먼트로 분할 된 세그먼트입니다.

세 번째 : 세그먼트가 블록으로 분할되며, 각 블록에는 하나 이상의 행을위한 공간이 있습니다.이 블록은 디스크 또는 OS 블록과 같은 이 아니며이 아닙니다. 오라클 블록은 하나 이상의 OS 블록입니다. (이 기능은 이동성 및 다른 블록 크기의 미디어 관리에 유용합니다.)

삽입시 데이터베이스는 테이블 공간의 모든 위치에서 블록의 공백을 선택합니다. 순차적으로 행을 삽입 할 수 있지만 (특히 빈 테이블에 일괄 삽입하는 경우) 일반적으로 데이터베이스는 일부 유형의 업데이트로 인해 행이 삭제되거나 이동 된 공간을 다시 사용합니다. 이론적으로는 배치가 예측 가능하지만 실제로는 특정 행에 의존하거나 특정 블록에 행을 배치해서는 안됩니다.

오라클의 흥미로운 점 중 하나는 ROWID입니다.

  • 확장 된 ROWID는 4 종 포맷을 가지며, OOOOOOFFFBBBBBBRRR :
  • 제 6 개 문자 OOOOOO 이용하여 데이터 오브젝트 번호를 나타내는이 행을 찾기 위해 DB있게 인덱스에 저장되어있는 기준 인 32bits
  • 다음 3 자의 FFF는 10 비트를 사용하는 테이블 공간 관련 데이터 파일 번호를 나타냅니다.
  • 다음 6 자의 BBBBB는 22 비트를 사용하여 블록 번호를 나타냅니다.
  • 마지막 3 문자 RRR
  • 는 참조 더 자세한 내용을 위해 16 비트

을 사용하여 행 수를 나타냅니다 http://docs.oracle.com/cd/E11882_01/server.112/e25789/logical.htm#autoId0

또 다른 생각 : 데이터 집합이 partitions라는 DB의 세계에서 개념이있다 일부 표현 논리에 따라 서로 다른 테이블 공간 (자주 클러스터 내의 다른 디스크 또는 노드)으로 나뉘어집니다. 예를 들어, 고객 테이블에서 수직 파티션은 해당 국가의 국가에 의해 정의 될 수 있습니다. 그렇게하면 호주 고객이 다른 고객 위에있는 동안 미국 고객이 물리적으로 하나의 디스크에 있도록 할 수 있습니다.

+0

고맙습니다. 명확한 답변입니다. 디스크의 테이블 데이터 B- 트리는 어떤 열로 정렬됩니까? –

+0

질문에 대답하기 위해 내 대답을 편집했습니다 –

+0

미안 해요 나는 명성 때문에 upvote 수 없습니다 –