SQL Server 초점 색인 이 비 집합 색인 에 미 치 는 영향 분석

머리말
SQL 2012 기초 과정 을 공부 하 는 과정 에서 수시로 다른 내용 을 삽입 하여 설명 을 한다.SQL Server 2012 T-SQL 기초 과정 을 본 어린이 신발 은 앞에서 쓴 모든 내용 이 책 에 적 힌 내용 을 발췌 한 것 이 아니 라 는 것 을 알 고 있다.만약 그렇다면 아무런 의미 가 없 을 것 이다.학습 과정 은 반드시 사고 하 는 과정 이 어야 한다.독립 적 으로 생각 하 든 자 료 를 찾 든 말 타고 꽃 구경 하 는 것 이 아니 라 생각 하 는 것 이다.그렇지 않 으 면 시간 이 지나 면 또 건망증 이 생 길 것 이다.간단 한 내용,깊이 있 는 이해.
화제
비 집합 색인 정의:비 집합 색인 도 B 트 리 구조 로 집합 색인 과 달리 B 트 리 의 잎 노드 는 색인 을 쌓 거나 모 으 는 지침 을 가리킨다.너 정말 이 해 했 니?당신 은 예 를 들 수 있 습 니까?사실 이 절 에서 최종 적 으로 표현 하고 자 하 는 것 은 바로 이 뜻 입 니 다.정의 가 너무 길 기 때문에 우 리 는 추상 적 으로 정 의 를 내리 고 최종 결론 을 얻 을 수 있 습 니 다.아래 를 보 세 요.
집합 색인 이 비 집합 색인 에 미 치 는 영향
집합 색인 과 비 집합 색인 에 대한 개념,원리,생 성 은 더 이상 서술 하지 않 습 니 다.이에 대해 잘 모 르 시 면 정원 의 다른 원우 들 의 상세 한 소 개 를 참고 하 시기 바 랍 니 다.
우선 테스트 표를 만 들 겠 습 니 다.

USE SQLStudy
GO
CREATE TABLE [dbo].[Test](
[ID] [int] NOT NULL,
[First] [nchar](10) NULL,
[Second] [nchar](10) NULL
)
GO
다음은 테스트 데 이 터 를 만 들 겠 습 니 다.

INSERT INTO [SQLStudy].[dbo].[Test] ([ID],[First],[Second])
SELECT 1,'First1','Second1'
UNION ALL
SELECT 2,'First2','Second2'
UNION ALL
SELECT 3,'First3','Second3'
UNION ALL
SELECT 4,'First4','Second4'
UNION ALL
SELECT 5,'First5','Second5'
GO
이 어 표 의 First 와 Second 열 에 집합 색인 을 만 듭 니 다.다음 과 같 습 니 다.

CREATE NONCLUSTERED INDEX [IX_MyTable_NonClustered] ON [dbo].[Test] (
[First] ASC,
[Second] ASC
)
이때 우 리 는 두 개의 조 회 를 동시에 실행 하고 그 실행 계획[주]을 봅 니 다.전편 에서 이미 말 했 듯 이 실제 실행 을 포함 한 계획 을 사용 하 십시오.

SELECT ID
FROM [dbo].[Test] WHERE [First] = 'First1' AND [Second] = 'Second1'
SELECT Second
FROM [dbo].[Test] WHERE [First] = 'First1' AND [Second] = 'Second1'
GO
이때 우리 가 본 집행 계획 은 다음 과 같다.

위 와 같은 의심의 여지 가 없 는 결론 을 얻 을 수 있다.조회 1 은 전체 표 스 캔 을 이용 한 것 이 고 조회 2 는 비 집합 색인 을 이용 하여 찾 는 것 이다.우 리 는 이 결론 에 대해 어떠한 의심 도 해 서 는 안 된다.두 번 째 조 회 를 원 하 는 Second 열 은 그 전에 액 비 집합 색인 을 만 들 었 고 조회 1 의 ID 는 없 기 때문에 조회 1 의 전체 표 스 캔 을 초래 할 수 있 으 며,조회 2 는 비 집합 색인 을 찾 을 수 있다.
다음은 표 의 열 ID 에 집합 색인 을 만 듭 니 다.

CREATE CLUSTERED INDEX [IX_MyTable_Clustered] ON [dbo].[Test] (
[ID] ASC
)
이때 우 리 는 다음 과 같은 조 회 를 다시 실행 합 니 다.

SELECT ID
FROM [dbo].[Test] WHERE [First] = 'First1' AND [Second] = 'Second1'
SELECT Second
FROM [dbo].[Test] WHERE [First] = 'First1' AND [Second] = 'Second1'
GO
이 때 실행 계획 조회:

상술 한 것 을 통 해 우 리 는 열 ID 에 대해 집합 색인 을 만 들 었 습 니 다.우 리 는 둘 다 색인 을 이용 하여 찾 았 다 는 것 을 바로 알 수 있 을 것 입 니 다.확실히 맞 습 니 다.하지만 당신 은 발견 하지 못 했 습 니 다.눈 을 크게 뜨 고 보 세 요.우 리 는 분명히 열 ID 에 집합 색인 을 만 들 었 습 니 다.이론 적 으로 색인 을 모 아 찾 아야 합 니 다.이것 이 바로 우리 가 본 고 에서 토론 해 야 할 문제 입 니 다.
문제 탐구
우 리 는 문 제 를 다음 과 같이 요약 합 니 다.열 에 집합 색인 을 만 들 때 이 열 을 되 돌려 줍 니 다.또한 조회 조건 은 비 집합 색인 열 을 만 드 는 것 입 니 다.이때 색인 을 모 은 열 을 만 드 는 조회 실행 계획 은 비 집합 색인 을 찾 는 것 입 니 다.그 중에서 바닥 까지 무슨 일이 발생 했 습 니까?
실제 발생 하 는 상황 은 비 집합 색인 내부 에서 집합 색인 을 인용 한 것 입 니 다.집합 색인 이 생 성 된 후 표 에 있 는 데 이 터 는 물리 적 논리 에 따라 정렬 됩 니 다.집합 색인 이 생 성 되 지 않 았 을 때 비 집합 색인 이 가리 키 는 표 의 데 이 터 를 마지막 으로 데 이 터 를 되 돌려 줍 니 다.그러나 집합 색인 이 생 성 되면 이때 비 집합 색인 은 재 구축 되 고 이때 가리 키 는 것 은 집합 색인 입 니 다.여기 서 원 우 케 리 슨 이 비 집합 색인 에 대한 설명 입 니 다.비 집합 색인 도 B 트 리 구조 입 니 다.집합 색인 과 달리 B 트 리 의 잎 노드 는 색인 을 가리 키 거나 모 으 는 지침 이 있 습 니 다.요약 이 매우 정확 합 니 다.집합 색인 을 만 들 었 을 때 집합 색인 이 아 닌 지침 은 집합 색인 을 가리 키 고 있 습 니 다.그렇지 않 으 면 이 때 가리 키 는 것 은 표 의 데이터 입 니 다.그래서 이 경우 검색 이 색인 을 모 으 는 열 을 만 들 었 을 때 비 집합 색인 을 찾 았 습 니 다.
이로써 검색 한 열 에 집합 색인 을 만 들 었 을 때(집합 색인 을 만 든 열 만 되 돌려 줍 니 다)검색 결 과 는 집합 색인 을 사용 하지 않 고 비 집합 색인 을 사용 하여 검색 결 과 를 찾 습 니 다.
총결산
개인 적 으로 정 의 를 내리 기 전에 우 리 는 먼저 이런 문 제 를 던 져 야 한다 고 생각 합 니 다.예 를 들 어 상기 비 집합 색인 의 정의:비 집합 색인 도 B 트 리 구조 입 니 다.집합 색인 과 달리 B 나무의 잎 노드 는 색인 을 가리 키 거나 모 으 는 지침 을 저장 합 니 다.이 말 을 처음 봤 을 때 느낌 이 별로 없 었 습 니 다.대충 이야기 하고 이해 한 것 같 았 습 니 다.이런 문제 에 부 딪 혔 을 때 어찌 할 바 를 몰 랐 습 니 다.사실은 정의 에 대한 이해 가 깊 지 않 거나 명확 하지 않 았 습 니 다.정 의 를 내 렸 을 때 이 정의 의 예 나 장면 을 들 수 있 습 니 다.그것 이 야 말로 진정 으로 이해 한 것 이 라 고 할 수 있 습 니 다.이 절 에서 우 리 는 여기 서 마 치 겠 습 니 다.SQL 이라는 시 리 즈 는 간단 한 내용 을 가지 고 깊이 있 는 이 해 를 통 해 설명 할 것 입 니 다.또한 조회 성능 문 제 를 점차적으로 이야기 할 것 입 니 다.문 제 를 던 져 서 최종 적 으로 문 제 를 해결 하 는 것 이 많은 것 이 라 고 할 수 있 습 니 다.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 서 교류 할 수 있 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다!

좋은 웹페이지 즐겨찾기