문제

IM은 꽤 복잡한 선택 쿼리에서보기를 만들려고 노력하고 있으며 하위 쿼리와 일부 집계 기능을 사용해야하기 때문에 클러스터 된 인덱스를 넣을 수 없습니다.

그렇지 않으면 클러스터 된 인덱스를 가져와야합니다. 그렇지 않으면보기를 사용하는 쿼리는 영원히 걸립니다. 분명히 SQL Server는 u 멍청한 양의 기준을 충족하는 경우 결과 세트 만 저장합니다.

보기의 기본 테이블은 읽기 전용이며 하루에 한 번 벌크 가져 오기 만 업데이트됩니다. 결과가 왜 캐시 할 수 없는지 알 수 없습니다.

누구든지 SQL Server를 가져 오는 방법을 아는 사람이 있습니까? 나는 실제로 모든 곳에서 많은 변화에 눈덩이를 만드는 다른 테이블 cos를 만들고 싶지 않습니다.

미리 감사드립니다.

도움이 되었습니까?

해결책

나는 당신이 찾고있는 대답은 다음과 같습니다. 이것을하기 위해 견해를 사용하지 마십시오. 반환 된 필드에 대한 필드가 SQL 쿼리를 형성하는 필드가있는 테이블을 사용하십시오. 이 테이블을 채우도록 쿼리를 자동화하십시오

다른 팁

짧은 대답은 언급 한 이유 때문에 클러스터 된 인덱스를 만들 수 없다는 것입니다.

복잡한 쿼리의 결과를 캐시하는 방법을 요청하면 SQL Server가 제공하는 유일한 다른 객체 (문제를 해결할 수있는 다른 객체)는 테이블입니다.

자동화가 문제 인 경우 뷰 생성을 고려해야하지만 뷰 생성을 고려해야하지만 뷰를 사용하여 삽입 한 직후 테이블에 자르기/삽입 (뷰에서 선택)을 수행 할 수 있도록 테이블에 삽입하는 방법으로 만 뷰를 사용해야합니다.

SSIS (SQL Server Integration Services)를 사용하는 경우 이는 비교적 사소한 것입니다.

내가 아는 한, 실행 계획을 컴파일 할 때 SQL Server는 본질적으로 뷰의 정의를 쿼리에 복사하고 붙여 넣습니다. 기본 테이블에 인덱스를 추가 할 수있는 한 우수한 성능을 얻을 수 있어야합니다. 쿼리에서.

당신이 구축하는 것은 데이터웨어 하우스처럼 들리므로 가장 좋은 옵션은 데이터가 시스템에 있으면 데이터를 조작하는 것입니다. 새로운 테이블의 새로운 테이블을 만들 수 있습니다 (또는 그렇지 않으면 수정 중).

그런 다음 필요한 경우이 테이블 위에 뷰를 만들 수 있습니다.

인덱스 뷰 내에서 집계를 사용하면 count () 대신 count_big ()를 사용해야합니다. 그렇지 않으면보기가 생성되지 않습니다.

또한 Enterprise Edition에 있지 않은 경우 NoExpand 힌트를 제공해야합니다. 그렇지 않으면 Optimizer는보기를 사용하지 않습니다.

SELECT *
FROM YourView WITH(NOEXPAND)
WHERE ....

어쩌면보기가 필요하지 않지만 테이블에 올바른 인덱스가 없으므로 테이블의 DDL (인덱스 및 제약 조건 포함)을 게시 할 수 있습니다.

나는 같은 문제가 있었고 결국 클러스터 된 인덱스보기 자체에 서브 쿼리를 넣었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top