2009-07-06 2 views
4

의 내가이 SQL 서버 인덱싱 된 뷰를 가지고 있다고 가정 해 봅시다, 두 개의 테이블, tbTableOnetbTableTwovwIndexedView.트랜잭션 중 인덱스 된 뷰가 업데이트됩니까?

트랜잭션 내에서 두 테이블 중 하나에서 작업을 수행하면 내 인덱싱 된 뷰는 어떻게됩니까? 즉시 갱신되거나 결과가 피드에 들어가기 전에 트랜잭션을 커밋해야합니까? 예컨대

는 :

BEGIN TRANSACTION testTransaction 
INSERT INTO tbTableOne VALUES ('1', '2') 
SELECT * FROM vwIndexedView 
COMMIT TRANSACTION 

SELECT * FROM vwIndexedView 

는 제 SELECT의 결과는 제 상이 할 것인가?

답변

9

인덱스 또는 인덱싱 된 뷰는 업데이트를 수행하는 DML 문의 일부로 즉시 업데이트됩니다. 귀하의 경우 INSERT의 실제 실행 계획을 분석하면 모든 물리적 '파티션'의 업데이트를위한 연산자가 포함되어 있으며 인덱싱 된 뷰는 그러한 파티션 중 하나라는 것을 알 수 있습니다.

0

중앙에서 논쟁의 대상이되는 테이블입니까? 트랜잭션에서 삽입을 위해 잠그면 다른 spids가 기다리게 될 것입니까?

간단한 대답은 예입니다.보기가 새 값으로 업데이트되지만,이 기본 테이블에 삽입하는 다른 장소가있을 경우 고려해야 할 성능 문제가 발생합니다.

2

인덱싱 된 뷰가 즉시 새로 고침됩니다. 실행 계획을보고 직접 볼 수 있습니다. 이로 인해 많은 잠금 경합이 발생합니다. be ready to drop your indexed view

관련 문제