programing

인덱싱된 뷰에 MAX() 애그리게이트를 사용할 수 없는 이유는 무엇입니까?

cafebook 2023. 8. 6. 10:20
반응형

인덱싱된 뷰에 MAX() 애그리게이트를 사용할 수 없는 이유는 무엇입니까?

인덱스 뷰를 몇 개 시도해보고 감명을 받았지만, 거의 항상 max나 min도 필요하고 왜 이것들과 함께 작동하지 않는지 이해할 수 없습니다. 이유를 설명할 수 있는 사람이 있습니까?

나는 그들이 허용되지 않는다는 것을 알고 있습니다, 나는 그 이유를 이해할 수 없습니다!!!카운트 등이 허용됩니다. 왜 MIN/MAX가 안되는지 설명을 찾고 있습니다.

이러한 집계는 변경된 값만을 기준으로 재계산할 수 없으므로 허용되지 않습니다.

일부 집계, 예를 들어COUNT_BIG()또는SUM()변경된 데이터만 봐도 다시 계산할 수 있습니다.기본 값이 변경되면 해당 변경의 영향을 직접 계산할 수 있으므로 인덱스된 보기에서 이러한 값을 사용할 수 있습니다.

기타 집계(예:MIN()그리고.MAX()변경되는 데이터만 보고 재계산할 수 없습니다.현재 max 또는 min인 값을 삭제하면 새 max 또는 min을 검색하여 전체 테이블에서 찾아야 합니다.

같은 원리가 다른 집계에도 적용됩니다.AVG()또는 표준 변동 집합체.SQL은 변경된 값만으로 이러한 값을 다시 계산할 수 없지만 새 값을 가져오려면 전체 테이블을 다시 검색해야 합니다.

인덱싱된 뷰에서는 MIN/MAX와 같은 집계 함수가 지원되지 않습니다.보기를 둘러싼 쿼리에서 MIN/MAX를 수행해야 합니다.

인덱스된 보기 내에서 허용되는 항목과 허용되지 않는 항목에 대한 전체 정의가 있습니다(SQL 2005).
인용문:

AVG, MAX, MIN, STDEV, STDEVP, VAR 또는 VARP 집계 기능.인덱싱된 뷰를 참조하는 쿼리에 AVG(식)가 지정된 경우 뷰 선택 목록에 SUM(식) 및 COUNT_BIG(식)가 포함된 경우 최적화 도구가 필요한 결과를 자주 계산할 수 있습니다.예를 들어 인덱싱된 뷰 SELECT 목록에는 AVG(column1)라는 식을 포함할 수 없습니다.보기 SELECT 목록에 SUM(column1) 및 COUNT_BIG(column1) 식이 포함된 경우 SQL Server는 보기를 참조하고 AVG(column1)를 지정하는 쿼리의 평균을 계산할 수 있습니다.

보기를 사용할 때 정렬을 추가하지 않고 주문된 항목을 보려면 열을 추가하고 그 안에 순서를 지정합니다.

id = row_number() over (order by col1, col2) 

리머스에서 명시한 이유 외에도 MIN과 MAX를 지원할 실질적인 필요성이 적습니다.

COUNT() 또는 SUM()과 달리 MAX 및 MIN은 계산 속도가 빠릅니다. 단 한 번의 조회만으로 설정할 수 있습니다. 많은 데이터를 읽을 필요가 없습니다.

언급URL : https://stackoverflow.com/questions/2134461/why-cant-indexed-views-have-a-max-aggregate

반응형