2012-07-22 3 views
1

클러스터 된 인덱스는 사용자 지정 순서에 따라 물리적으로 디스크의 테이블 행을 정렬합니다. 테이블이 파일에 저장되어 있다고 가정합니다 (테이블 당 하나의 파일일까요?). 그럼에도 누군가가 테이블에 "새로운 행"을 삽입한다고 가정 해 봅시다. 시작 부분에 배치되어야합니다. 그런 다음 데이터베이스는 전체 테이블 (모든 행)을 물리적으로 파일로 이동해야합니까? 너무 느리거나 삽입 후 정렬 된 순서를 얻는 방법에 대한 최적화 기술이 있습니까?클러스터 된 인덱스가있는 테이블에 삽입

+1

RDBMS는 무엇입니까? SQL Server? –

+0

** SQL Server **에 대해 이야기하고 있다면 - 데이터는 균형 잡힌 b-tree 구조로 구성된 8K 페이지로 유지됩니다. 테이블에서 새로운 행이 삽입되는 위치는 거의 무의미합니다. 취할 수있는 단계가있을 수도 있고 없을 수도 있지만 ** 분명히 ** 순차적 인 파일 형 구조는 아닙니다. 새로운 행이 삽입되면 다시 ... –

답변

3

테이블이 반드시 파일로 저장되는 것은 아닙니다. 논리적으로, 그들은 페이지에 저장됩니다. 모든 페이지에 100 개의 행이 있고 필요에 따라 추가로 20 개의 행을 저장할 수 있다고 가정합니다. 그런 다음 모든 페이지가 링크되어 전체 테이블 데이터를 만듭니다.

처음에는 새 행을 추가 할 때 첫 번째 페이지 만 변경하면 100 개의 행만 이동됩니다. 그 페이지의 행 수가 120을 초과 할 때 반복해서 반복하면 페이지가 함께 링크 된 두 개의 새 페이지로 분할됩니다.

+0

맞아, 내 실수. –

+0

난 그냥 추가 할 것입니다. . . "테이블이 반드시 파일로 저장되는 것은 아닙니다". 데이터베이스는 원하는대로 테이블을 저장할 수 있지만 SQL을 지원하는 일부 데이터베이스는 테이블을 파일에 넣을 수 있습니다. 대부분 그렇지 않지만 엔진을 작성하는 사람들을위한 디자인 결정입니다. –

+0

좋은 지적. 물론 모든 데이터베이스는 테이블을 파일에 저장할 수 있습니다. 나는 그 질문에 대한 일반적인 관점을 제시하고 있었다. 그러나 대부분의 경우와 오라클, DB2 또는 SQL 서버와 같은 대부분의 DBMS에서는 행 -> 페이지 -> 테이블 -> 파일 또는 디스크가됩니다. 나는 당신의 요점에 따라 나의 응답을 편집 할 것이다. –

관련 문제