2014-12-19 3 views
-1

안녕 나는 계산 된 열을 필터링하는 방법을 찾고있었습니다. 나는 HAVING을 사용하여 자금을 조달합니다.SQL HAVING 성능

필요에 따라 계산을 반복해야 할 필요가있을 때 SQL을 두 번 계산해야하고 결과적으로 성능에 영향을 미칠지 궁금합니다.

예 :

USE AdventureWorks2012 ; 
GO 
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal 
FROM Sales.SalesOrderDetail 
GROUP BY SalesOrderID 
HAVING SUM(LineTotal) > 100000.00 
ORDER BY SalesOrderID ; 
+0

SQL Server와 매우 유사하기 때문에 sql-server 태그가 추가되었습니다. –

+0

이 검색어를 'HAVING'이없는 동일한 검색어와 비교 했습니까? 확인하는 것은 매우 간단해야합니다. – Andrew

+0

"SUM (LineTotal) AS SubTotal"이라는 필드 이름을 정의한 Im 이후로 현재 샘플 데이터베이스는 – Flib

답변

2

계산을 수행의 비용이 group by 배열입니다. 추가 집계 함수를 수행하면 그룹으로 데이터를 정렬하는 것과 비교하여 매우 적은 오버 헤드가 추가됩니다. 또한 SQL Server는 sum()을 한 번만 계산할만큼 똑똑 할 수 있습니다. 잘 모르겠지만 매우 합리적인 최적화가 될 것입니다.

참고 : 이는 기존 집계 함수에 해당됩니다. count(distinct) 또는 통계 함수와 같은 일부 함수는 오버 헤드가 더 많이 발생하므로 여러 번 호출 할 때주의해야합니다.

+0

으로 작습니다. "HUBVING SubTotal> 100000.00"? – Flib

+0

@Flib. . . 하위 쿼리에서이 작업을 수행 할 수 있습니다. 그러나 실제로는 필요하지 않습니다. 추가 집계 함수에 대한 오버 헤드는 그룹으로 데이터를 정렬하는 것에 비해 미미합니다. –