programing

SQL Server에서 구체화된 뷰를 작성하는 방법

subpage 2023. 4. 19. 23:00
반응형

SQL Server에서 구체화된 뷰를 작성하는 방법

데이터 웨어하우스를 설계할 예정인데 구체화된 뷰에 대해 들었습니다.실제로 뷰를 만들고 싶은데 기본 테이블이 변경되면 뷰가 자동으로 업데이트됩니다.질문의 예를 들어 설명할 수 있는 사람이 있습니까?

SQL Server에서는 인덱스 뷰라고 부릅니다. 자세한 배경은 다음 백서를 참조하십시오.

기본적으로 필요한 것은 다음과 같습니다.

  • 규칙적인 뷰를 작성하다
  • 해당 보기에 클러스터된 색인 생성

그럼 끝이야!

어려운 점은 뷰가 화이트 페이퍼에 개략적으로 설명되어 있는 많은 제약과 한계를 충족해야 한다는 것입니다.이렇게 하면 끝이에요.보기가 자동으로 업데이트되므로 유지보수가 필요하지 않습니다.

기타 자원:

인덱싱 뷰는 순전히 엔지니어링 관점에서만 볼 수 있지만 실제 시나리오는 매우 다릅니다.인덱싱할 수 있는 항목과 인덱싱할 수 없는 항목에 대한 제약이 너무 많아 인덱싱된 뷰를 가장 필요한 곳에서 사용할 수 없습니다.

뷰에 외부 조인이 있는 경우 조인을 사용할 수 없습니다.또한 일반적인 테이블 표현식은 허용되지 않습니다...실제로 하위 선택 또는 파생된 테이블(예: 절별 파티션)에 순서가 있으면 운이 없습니다.

따라서 인덱스 뷰를 활용하는 매우 간단한 시나리오만 남습니다.내 생각에는 기본 테이블에 적절한 인덱스를 작성함으로써 최적화할 수 있습니다.

실제로 인덱스 뷰를 사용해 본 적이 있고, 그것이 없으면 할 수 없는 실제 상황의 시나리오를 듣고 싶다.

실제 Materialized View가 무엇인지에 대해 좀 더 많은 배경이 필요할 수 있습니다.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_param view/table을 지정하거나 캐시 테이블을 가리키도록 참조하는 쿼리 또는 기타 뷰를 변경합니다.

매일/매일/매일/주간/새로고침하지 않는 일정

begin transaction
truncate table cachetablename
insert into cachetablename select * from viewname
commit transaction

NB: 이렇게 하면 tx 로그에도 공간이 사용됩니다.계산 속도가 느린 소규모 데이터 세트에 가장 적합합니다."쉽지만 큰" 열을 먼저 외부 뷰로 제거하기 위해 리팩터를 사용할 수도 있습니다.

MS T-SQL Server의 경우 "include" 문을 사용하여 인덱스를 작성하는 것을 권장합니다.고유성이 필요하지 않으며 클러스터된 인덱스와 연결된 데이터의 물리적 정렬도 필요하지 않습니다."인덱스...포함()"은 시스템에서 자동으로 유지 관리하는 별도의 물리적 데이터 스토리지를 생성합니다.개념적으로 Oracle Materialized View와 매우 유사합니다.

https://learn.microsoft.com/en-us/sql/relational-databases/indexes/create-indexes-with-included-columns

언급URL : https://stackoverflow.com/questions/3986366/how-to-create-materialized-views-in-sql-server

반응형