NON-CLUSTERED 를 잘 모르겠습니다
344
작성한 질문수 7
1. CLUSTERED 는 영한 사전처럼 순서대로 저장된다고 하셨는데 그러면 DB에 INSERT 하는 순서대로 저장되는건가요?
2. NON-CLUSTERED 를 사용하는 이유르 정확하게 모르겠습니다. accountName을 NON-CLUSTERED INDEX로 만들었는데 보통 닉네임을 정할때 중복없이 생성하게 되는데 이걸 색인으로 만들면 특정 이름을 찾는데에 모든 플레이어들의 이름을 다 비교하는게 아닌가요? 만약 그렇게 되면 색인을 넣든 안넣든 똑같은게 아닌가요?
예를들어서 플레이어를 찾을 때 [찾고싶은 플레이어 이름 = '플레이어 이름'] 이런식으로 찾는다 했을 때 굳이 색인이 필요한지 색인을 안하고 [찾고싶은 플레이어 이름 = '플레이어 이름'] 이런식으로 찾을 수는 없는건가요?
아니면 색인을 넣어줘야지 위처럼 찾는 기능이 가능한건가요?
답변 1
2
1.
그건 아니구요.
단어에 따라 [물리적으로 저장되는 위치]가 정해진다는 비유이지,
정말 영한 사전처럼 순차적으로 이어서 저장되진 않습니다.
실제로는 트리 계열 (B-Tree) 알고리즘을 이용해서 저장될 위치가 결정되는데
이는 DB 제품마다 조금씩 다를 수 있습니다.
2.
보통 닉네임을 정할때 중복없이 생성하게 되는데 이걸 색인으로 만들면 특정 이름을 찾는데에 모든 플레이어들의 이름을 다 비교하는게 아닌가요?
-> 그렇지 않습니다. 오히려 반대로 이해하고 계시네요.
CASE1 : accountName에 색인이 없을 경우
- 특정 이름을 찾고 싶어도 데이터들이 accountName을 기준으로 정렬되어 있지 않으니
모든 데이터의 플레이어 이름을 다 비교해야 함. (데이터 1억개라면 1억번 비교 GG)
CASE2: accountName에 색인이 있을 경우
- 색인을 보고 빠르게 찾을 수 있음
가령, 어떤 1000페이지 짜리 책에 accumulate이라는 단어가 등장하는지 알고 싶다고 가정해봅시다.
책 뒤에 있는 색인을 보면, accumulate()가 122, 125페이지에 등장하는 것을 알 수 있으니 바로 찾을 수 있겠죠.
아마 위 내용이 잘 이해 안 가시는 가장 큰 이유는
자료구조&알고리즘 쪽의 균형 이진 트리 쪽 지식이 부족해서일 것으로 보입니다.
기회가 되면 AVL이나 Red-Black Tree라거나
트리 쪽 공부를 해보면 쉽게 와닿을 것 같네요.
간단하게 요약하면, 균형 이진 트리는
왼쪽은 더 작고, 오른쪽으로 가면 더 큰 형태로 데이터가 저장되어 있습니다.
이런 트리 구조를 accountName에도 응용한다면,
사전 순서상 작은 단어는 왼쪽, 더 크면 오른쪽에 배치하는 형태로
logN 시간 복잡도에 빠르게 서칭할 수 있는 구조를 만들 수가 있습니다.
아니면 색인을 넣어줘야지 위처럼 찾는 기능이 가능한건가요?
찾는 기능 자체는 INDEX 여부와 무관하게 항상 사용 가능합니다.
단 성능 자체가 어마무시하게 차이가 나게 됩니다.
INDEX가 걸려있지 않다면, 데이터가 1억개일 경우 1억개를 다 서칭할 것이고
INDEX가 적절하게 걸려 있다면, 100회 미만의 서칭 개수로 데이터를 찾을 수 있게 됩니다.
0
CLUSTERED를 사용하면 트리계열 알고리즘이 순서대로 알아서 저장시키고, NON-CLUSTERED도 이런식으로 저장된 색인이 BD에 많은 데이터들을 전부 비교하는 가능성을 이진탐색트리로 범위를 좁혀서 빠르게 찾는 방법이었군요
최신 하드웨어에서 SQL Express 설치에러 해결법
0
60
1
인벤토리 테이플 데이터가 엄청 많아지면
0
98
2
DISTINCT의 행 개수와 COUNT(DISTICNT )의 결과가 왜 차이나는지 궁금합니다.
0
102
1
conect시 신뢰할 수 없는 기관에서 인증서 발급 오류 뜨시는분들
0
320
1
PRIMARY KEY와 CLUSTERED INDEX의 차이
0
332
1
락과 트랜잭션 격리수준 차이는 뭔가여?
0
535
1
외래 키 질문이 있습니다.
0
386
1
게임 프로젝트와 연동하는 강의 내용은 포함되어 있지 않는 건가요?
0
566
1
윈도우 함수는 SELECT에서만 사용가능한가요?
0
453
1
데이터 베이스가 만들어지지 않을 때
9
800
3
sql 강의 관련 질문
0
680
1
강의내용 외의 질문이 있습니다
0
583
1
sinter
0
361
1
테이블 여러개랑 조인
0
373
1
서버 컴퓨터 스펙에 따라서 성능 차이가 심한가요?
0
799
1
Non-Clustered 에서 clustered index 추가시
0
439
1
UNIQUE INDEX와 PRIMARY KEY의 기능적차이
0
584
1
Part5: 데이터베이스_ SSMS 입문 테이블작성 오류에관하여
2
904
2
인덱스의 저장 방식에 대해서 질문이 있습니다!
1
539
1
MSSQL vs AWS
0
365
1
join 관련 질문입니다.
0
288
2
Inner Join 질문
0
306
1
데이터베이스 원리는 CAP이론을 비유하여 설명하신 건지 궁금합니다.
1
401
0
CLUSTERED INDEX
1
305
1





