인덱싱된 뷰에 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
'programing' 카테고리의 다른 글
파워셸에서 자동 삭제 확인 (0) | 2023.08.06 |
---|---|
시리즈 및 데이터 프레임 병합 방법 (0) | 2023.08.06 |
쿠버네티스는 실제로 무엇을 합니까? (0) | 2023.08.06 |
nodejs에 대한 좋은 메시지 대기열 옵션은 무엇입니까? (0) | 2023.08.06 |
파이썬에서 가져온 모듈의 main()을 호출할 수 있습니까? (0) | 2023.08.06 |