2013-02-19 2 views
4

여러 테이블에서 조인을 수행하여 성능이 저하되는 쿼리가 있습니다.SQL Server에서 여러 조인의 성능을 향상시키기 위해 인덱싱 된 뷰

성능을 향상시키기 위해 인덱싱 된보기를 만들었고보기가있는 날짜 필터가있는 쿼리의 성능이 크게 향상되었습니다. 그러나, 내 관심사는 색인의 저장에 관한 것입니다. 내가 읽은 것으로부터 고유 한 클러스터 된 인덱스가 SQL Server에 저장됩니다. 뷰 내에서 조인의 일부로 생성 된 전체 데이터를 개별적으로 저장한다는 의미입니까? 그렇다면 뷰의 조인에 포함 된 테이블의 모든 열을 포함했다면 소비 된 서버의 디스크 공간은 인덱싱 된 뷰가없는 디스크 공간의 약 두 배가됩니까? 그리고 기본 테이블에 데이터를 입력 할 때마다 인덱싱 된 뷰에 대해 데이터가 복제됩니까?

답변

3

네, 맞습니다. 인덱싱 된 뷰는 소스 테이블과 별도로 뷰의 모든 데이터를 유지합니다. 열과 조인에 따라 데이터가 복제되어 실제로 소스 테이블보다 몇 배 더 커질 수 있습니다.

3

예, 그렇습니다. 엔진의 추가적인 노력과 엔진을 유지하는 데 필요한 추가 스토리지에 대한 대가로 더 나은 성능을 얻을 수있는 트레이드 오프를 만들었습니다.

4

맞습니다. 인덱싱 된 뷰는 기본적으로 정렬 된 방식으로 모든 데이터의 복사본을 포함하는 추가 테이블입니다. 이 때문에 SQL Server의 모든 기능이 빨라지므로 가격이 필요합니다.이 경우 추가 스토리지가 필요하며 데이터의 모든 복사본을 동기화 상태로 유지하는 데 필요한 추가 시간이 필요합니다.

표의 일반 색인에 대해서도 마찬가지입니다. 또한 색인 키의 복사본 (원래 행을 찾을 수있는 위치에 대한 일부 정보 포함)이기 때문에 추가 저장 영역과 업데이트가 유지되는 동안 추가 시간이 필요합니다.

테이블이나 뷰에 인덱스를 추가하는 것이 타당한지를 판단하려면 전체 시스템을보고 한 쿼리의 성능 향상이 다른 쿼리의 성능 저하에 가치가 있는지 확인해야합니다.

기본 테이블의 추가 인덱스가 쿼리에 도움이되는지 (처음으로) 확인해야합니다.

관련 문제