DW를 디자인하려고하는데 구체화 된 뷰에 대해 들었습니다. 실제로보기를 만들고 싶습니다. 기본 테이블이 변경되면 자동으로 업데이트됩니다. 누구든지 쿼리 예제로 설명 할 수 있습니다 ..
답변:
SQL Server 에서는 인덱싱 된 뷰 라고 합니다. 자세한 배경 정보는 다음 백서를 읽으십시오.
기본적으로해야 할 일은 다음과 같습니다.
그리고 당신은 끝났습니다!
까다로운 부분은보기가 많은 제약과 제한을 충족해야한다는 것입니다. 이러한 제한은 백서에 설명되어 있습니다. 이렇게하면-그게 전부입니다. 보기는 자동으로 업데이트되며 유지 관리가 필요하지 않습니다.
추가 리소스 :
순전히 엔지니어링 관점에서 볼 때 인덱스 된 뷰는 모든 사람이 성능을 향상시키는 데 사용할 수있는 것처럼 들리지만 실제 시나리오는 매우 다릅니다. 인덱싱 할 수있는 항목과 인덱싱 할 수없는 항목에 대한 제한이 너무 많기 때문에 가장 필요한 인덱싱 된 뷰를 사용하는 데 실패했습니다.
뷰에 외부 조인이 있으면 사용할 수 없습니다. 또한 공통 테이블 표현식은 허용되지 않습니다. 실제로 하위 선택 또는 파생 테이블 (예 : partition by 절 사용)에 순서가 있으면 운이 좋지 않습니다.
이렇게하면 인덱싱 된 뷰를 활용하는 매우 간단한 시나리오 만 남습니다. 어쨌든 기본 테이블에 적절한 인덱스를 만들어 최적화 할 수 있다고 생각합니다.
사람들이 실제로 인덱싱 된 뷰를 자신의 이익을 위해 사용했고 그것들 없이는 할 수 없었던 실제 시나리오를 듣고 기뻐할 것입니다.
(NOEXPAND)
인덱싱 된 뷰를 사용하는 쿼리 에 힌트 를 추가해야합니다 . 그리고 그 차이를 알 수 있습니다. 인덱싱 된 뷰 사용과 "적절한 테이블 인덱싱"의 장점은 레코드 선택을 제한하는 것입니다. 그렇지 않으면 정확합니다.
구체화 된 뷰가 실제로 무엇인지에 대해 좀 더 배경이 필요할 수 있습니다. Oracle에서 이들은 다른 곳에서 빌드하려고 할 때 여러 요소로 구성된 객체입니다.
MVIEW는 본질적으로 다른 소스의 데이터 스냅 샷입니다. 뷰와 달리 데이터는 뷰를 쿼리 할 때 찾을 수 없으며 테이블 형태로 로컬에 저장됩니다. MVIEW는 정기적으로 시작되거나 소스 데이터가 변경 될 때 시작되는 백그라운드 절차를 사용하여 새로 고쳐집니다. Oracle은 전체 또는 부분 새로 고침을 허용합니다.
SQL Server에서는 다음을 사용하여 정기적으로 (완료) 새로 고침하는 기본 MVIEW를 만듭니다.
먼저보기입니다. 보기는 모든 데이터베이스에서 매우 일반적이기 때문에 이것은 대부분의 경우 쉬울 것입니다. 다음, 테이블입니다. 이는 열 및 데이터의보기와 동일해야합니다. 이것은 뷰 데이터의 스냅 샷을 저장합니다. 그런 다음 테이블을 자르고 뷰의 현재 데이터를 기반으로 다시로드하는 프로 시저입니다. 마지막으로 절차를 시작하는 작업이 작동합니다.
다른 모든 것은 실험입니다.
인덱싱 된 뷰가 옵션이 아니고 빠른 업데이트가 필요하지 않은 경우 해킹 캐시 테이블을 만들 수 있습니다.
select * into cachetablename from myviewname
alter table cachetablename add primary key (columns)
-- OR alter table cachetablename add rid bigint identity primary key
create index...
그런 다음 sp_rename view / table을 사용하거나 캐시 테이블을 가리 키도록이를 참조하는 쿼리 또는 다른보기를 변경합니다.
매일 / 야간 / 주간 / 새로 고침하지 않는 일정
begin transaction
truncate table cachetablename
insert into cachetablename select * from viewname
commit transaction
주의 : 이것은 tx 로그에서도 공간을 차지합니다. 계산 속도가 느린 소규모 데이터 세트에 가장 적합합니다. "쉽지만 큰"열을 먼저 외부보기로 제거하기 위해 리팩터링 할 수 있습니다.
MS T-SQL Server의 경우 "include"문을 사용하여 인덱스를 만드는 것이 좋습니다. 고유성이 필요하지 않으며 클러스터형 인덱스와 관련된 데이터의 물리적 정렬도 필요하지 않습니다. "Index ... Include ()"는 시스템에서 자동으로 유지 관리하는 별도의 물리적 데이터 저장소를 만듭니다. 개념적으로 Oracle Materialized View와 매우 유사합니다.
https://msdn.microsoft.com/en-us/library/ms190806.aspx
https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx