2012-12-19 5 views
0

아래 질문이 있는데 그것을 최적화하는 방법을 찾고 있습니다 (더 효율적이고 빠르게 만듭니다). 누구든지 아이디어가 있습니까?이 쿼리를 최적화하는 데 대한 아이디어가 필요합니다.

SELECT s.oem_id, s.name, SUM(u.minimum_gfs) AS minimum_gfs, sum(u.minimum_ofs) AS  
    minimum_ofs, sum(u.minimum_wq) AS minimum_wq 
FROM nmp_building_reqs AS s 
    LEFT OUTER JOIN nmp_building_util AS u 
ON u.oem_id = s.oem_id 
GROUP BY s.oem_id, s.name 
+1

쿼리를 실행하여 * 실제 * 실행 계획을 작성 했습니까? –

+0

음, 인덱스를 추가하는 것이 도움이 될 것입니다. 조각 모음? 필요한 데이터에 대한 추가 정보 (및 @marc_s에 따른 실행 계획)가 없으면 결과 데이터 집합을 변경하지 않고 쿼리 자체를 실제로 최적화 할 수 없습니다. 예를 들어 LEFT JOIN은 INNER JOIN보다 느려지므로이를 변경하면 일부 행이 제거됩니다. – PinnyM

+2

SQL 최적화와 관련하여 더 좋은 질문이 있으면이 내용을 참조하십시오. http://stackoverflow.com/a/13511317/1584772 – dan1111

답변

5

유일하게 명백한 일은 oem_id가 조인을 더 빠르게하기 위해 색인되어 있는지 확인하는 것입니다.

그러나 조인 전에 집계를 수행 한 다음 이름을 가져올 수 있다는 의구심이 있습니다. 이것은 oem_id가 하나의 이름 만 가지고 있다고 가정합니다. 쿼리는 다음과 같이 표시됩니다.

SELECT s.oem_id, s.name, u.minimum_gfs, u.minimum_ofs, u.minimum_wq 
FROM nmp_building_reqs s left outer join 
    (select u.oem_id, SUM(u.minimum_gfs) AS minimum_gfs, 
      sum(u.minimum_ofs) AS minimum_ofs, sum(u.minimum_wq) AS minimum_wq 
     from nmp_building_util u 
     group by u.oem_id 
    ) u 
    ON u.oem_id = s.oem_id 
+0

후자의 제안이 효과가있을 수 있습니다. 놀랍게도 쿼리 최적화 프로그램은이 작업을 수행하지 않습니다. 분명히 구현되지 않았습니다. – usr

+0

@usr. . . 옵티마이 저가 수행하지 않는 것들이 너무 많아서 그들이 수행하는 많은 일들을 간과하기 쉽습니다. 필자가 선호하는 쿼리는 쿼리를 실행하는 시간이 단축되어 인덱스를 작성하고 쿼리를 실행할 수있는 쿼리입니다. –

+0

흠 나는 그것을 시도했지만 집계 함수 나 GROUP BY 절에 포함되지 않았기 때문에 minimum_gfs가 선택 목록에 유효하지 않다고 불평했습니다 – dido

관련 문제