2012-06-30 3 views
0

최근에 제 동료의 코드에서 많은 열이있는 GROUP BY을 사용하는 sql 쿼리를 보았습니다. 이러한 열의 대부분은 쿼리에서 그룹화 할 필요가 없습니다. 그녀는이 오류 방지하기 위해 수행했습니다그룹의 작업 수 :

Column 'some_col' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

내가 GROUP BY가 얼마나 무거운 궁금 해서요, 그리고 그러한 문을 사용하는 것이 괜찮습니다? 그것이 내가 그녀의 쿼리를 최적화하는 것이 좋을 것보다 무겁다면 이제는 그 코드를 작업 할 것입니다.

답변

3

특정 쿼리를 보지 않고도 확실하게 알기는 어렵지만 GROUP BY에 포함 된 열 수를 최소화하고 놀라운 성능 향상 (SQL2K에서는 leased)을 얻었습니다. 내부 질의. 보다 구체적으로 : OrderDetails (OrderID, ProductID, Quantity, Price) 및 Products (ProductID, ProductName) 테이블을 분류했다고 가정합니다. 이것에

select P.ProductID, ProductName, sum(Quantity * Price) 
from Products as P 
    inner join OrderDetails as OD on P.ProductID = OD.ProductID 
group by P.ProductID, ProductName 

:이 쿼리를 변경하면 정수 인덱스에 그룹화하는 텍스트 값, 분류되지 않은 제품에 그룹화 한 후 빠른 때문에 두, 같은 테이블에 조인에도 불구하고

select X.ProductID, PP.ProductName, X.OrderValue 
from 
    (
    select P.ProductID, sum(Quantity * Price) as OrderValue 
    from Products as P 
     inner join OrderDetails as OD on P.ProductID = OD.ProductID 
    group by P.ProductID 
) as X 
    inner join Products as PP on X.ProductID = P.ProductID 

나에게 성능 향상을 줄 것이다 이름.

관련 문제