클러스터링 인덱스 문의 드립니다. (mysql) 0 3 562

by rmsja10 [MySQL] [2020.03.29 01:31:50]


안녕하세요 어쩌다가 관심을 가져서 검색하고 찾아봐도 이해가 되지 않아서 문의 드립니다.

 

보통 일반 인덱스의 경우 루트, 브랜치, 리프로 나눠져 있어서 리프에서는 로우아이디를 가지고 해당 데이터의 위치를 정확히 찝어서 데이터를 가져오는거로 보이느데요(한 개의 데이터가 아니라 정확히는 해당 블록)

 

클러스터링 인덱스는 자료를 찾아보면 테이블에 한개만 지정되고 보통 pk를 통해 인덱스를 구성. 인덱스 정렬 값에 따라 실제로 데이터도 정렬되어진다고 되어있더라구요. 그말인 즉 pk를 변경하면 데이터도 재배치 되는걸로 보이는데요.

 

아무튼 이런 내용을 찾다보니 클러스터링 인덱스에 대해 나온 그림을 보면 루트, 브랜치까지는 동일하나 리프블럭이 곧 pk로 정렬된 테이블이다라고 그러던데요.

 

일반 인덱스의 경우 원하는 데이터의 rowid로 접근해서 가져오는 반면 위처럼 브랜치에서 바로 리프(테이블의 데이터)를 가르킨다는 의미는 어떤 의미인가요? 어떤 원리로 해당하는 데이터를 찾을 수 있는건지 이해가 안가서요. 

 

클러스터링 인덱스를 통해 검색 할 경우 어떻게 원하는 로우를 찝어서 데이터를 가져올 수 있는지 이해가 되지 않습니다 ㅠㅠ

 

여러이미지들을 보면 브랜치에서 리프가 속한 블락을 가르키던데.. 이렇게만 가리켜도 일반 인덱스도 rowid를 통해 데이터를 조회해도 블락단위로 읽어야 하니 둘은 결국 똑같이 블락 단위로 버퍼에 올려야 하므로 성능상으로는 비슷한게 되는건가요? 

 

전반적인 이해 없이 질문을 드리는거 같아서 ㅠㅠ질문내용이 이해가 안갔다면 죄송합니다

by 타락천사 [2020.03.30 08:13:18]

mysql 이나 mssql 에서 말하는 cluster index 는 동일한 개념으로 알고 있습니다. 

CLUSTER INDEX 는 아래 링크 처럼 클러스터 인덱스 생성과 동시에, CLUSTER INDEX KEY 값으로 정렬 하여 (테이블) 재구성 합니다.

테이블 자체가 CLUSTER INDEX 기준으로 정렬되어 있고,

CLUSTER INDEX 칼럼 + 나머지 칼럼 이런식 구조라, 별도의 테이블을 찾아가는 IO 가 불필요함 !!!

mysql -> https://mongyang.tistory.com/75

ms sql > https://mongyang.tistory.com/75


by 마농 [2020.03.30 08:24:43]

인덱스 구조와 동일하지만
리프노드에 ROWID 를 가지는게 아니라 ROW 자체를 가지고 있다고 보시면 됩니다.


by rmsja10 [2020.04.02 15:59:35]

두분 답변 감사합니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입