2010-01-07 5 views
2

나는 인덱스 된 뷰를 undestand하지만 언더 레이팅 테이블의 데이터가 변경되면 정확히 무슨 일이 일어 났는지 궁금합니다. 전체보기 캐시가 삭제되었거나 변경된 행입니까?SQL 인덱스 된 뷰 : 데이터가 변경된 경우 어떤 일이 발생합니까?

호텔 가용성 (+ 100k 레코드)을 검색하는 데 사용되는 여러 테이블 (+5)에 대해 매우 복잡한 쿼리가 있으며 IMHO 인덱싱 된 뷰는 성능을 크게 향상시킬 수 있습니다. 그러나 데이터 (몇 행)가 자주 변경됩니다 (방을 팔았고 무료 객실은 admin atc에서 변경되었습니다). 한 행만 변경되었을 때마다보기가 다시 작성되면 내 응용 프로그램의 병목이됩니다.

또는 어떤 아이디어를 매우 coplex 쿼리를 "캐시"하는 방법?

감사합니다. 은 TechNet 문서에서

답변

3

:

일반 인덱스와 달리이 참여 모든 테이블에 단일 행 삽입은 여러 행이 인덱싱 된 뷰에 변경 될 수 있습니다. 단일 행이 다른 테이블의 행의 여러 행과 조인 할 수 있기 때문입니다. 업데이트 및 삭제의 경우도 마찬가지입니다. 따라서 인덱싱 된 뷰의 유지 관리는 테이블의 인덱스를 유지하는 것보다 더 비쌉니다 ( ).

자료 : 행 반드시/업데이트 그 전체 뷰를 다시 만들지 않고, 여기서 중요한 업데이트 것처럼

http://technet.microsoft.com/en-us/library/cc917715.aspx#XSLTsection124121120120

즉 들린다.

+1

인덱스 된 뷰를 사용하여 SP를 다시 작성했으며 성능이 놀랍습니다!. 인덱스 된 뷰를 다시 빌드 할 때 추가로 큰 유지 관리 작업을 수행하지 않기를 바랍니다. – Feryt

0

SQL Server를 실행 중이라고 가정합니다. 100k + 행은 많지 않습니다. 5ish 테이블에 합류하는 경우 인덱싱 된 뷰를 구현하기 전에 합류하는 열에 덮게 인덱스가 있는지 확인하는 것이 좋습니다. 쿼리 분석기를 사용하여 쿼리에서 병 목을 직접 찾습니다. 작은 테이블에서 성능 문제가 발생하면 거기에 불쾌한 테이블 스캔이있을 수 있습니다.

+0

100k 행의 5 개 테이블을 조인 할 때 성능 문제가 발생하면 쿼리 어딘가에 문제가있는 것 같아서 인덱싱 된 뷰로 이동하면 데이터베이스 서버가 비효율적 인 쿼리를 더 자주 다시 실행하게됩니다. 원본 쿼리의 실행 계획을 검토하고 특히 테이블 스캔을 살펴보고 인덱싱 된 뷰를 추가로 작업하기 전에 인덱스를 다시 작성하고 인덱스를 개선하여 실행 속도를 높이는 것이 좋습니다. – eftpotrm

+0

안녕하세요. 테이블 스캔 (및 유사한 느린 작업)에 대한 실행 계획을 확인하는 것이 SQL 스크립트를 튜닝 할 때 항상 제일 먼저하는 일입니다. 쿼리는 UDF가 많았습니다. 인덱싱 된 뷰로 이동 한 후에는 항상 계산되지 않았으므로 성능이 뛰어납니다. – Feryt

관련 문제