-1

以下のクエリは、実行に時間がかかります。これは、tez 実行エンジンで実行されます。

SELECT STG.EMP_TYPE, DEPT, A.TOTAL_COUNT, COUNT(DISTINCT EMP_ID) AS COUNT_DEPT
FROM 
STAGE_SOURCE STG 
LEFT OUTER JOIN 
( SELECT EMP_TYPE, COUNT(DISTINCT EMP_ID) AS TOTAL_COUNT 
  FROM STAGE_SOURCE 
  GROUP BY EMP_TYPE 
) A
ON STG.EMP_TYPE = A.EMP_TYPE
GROUP BY STG.EMP_TYPE, DEPT, A.TOTAL_COUNT;

クエリのパフォーマンスを改善できる書き換えオプションまたは最適化戦略はありますか?

4

2 に答える 2

0

あなたのクエリを理解することで、2 つの値のカウントが必要であることを理解できました。まず、各 EMP_TYPE の下にある EMP_ID の数、そして次に。DEPT および EMP_TYPE の下の EMP_ID の数

SELECT 

STG.EMP_TYPE, 
DEPT,
TOTAL_COUNT, 
COUNT(EMP_ID) AS COUNT_DEPT

FROM 
STAGE_SOURCE STG 
JOIN 
( SELECT EMP_TYPE, COUNT(EMP_ID) AS TOTAL_COUNT 
  FROM STAGE_SOURCE 
  GROUP BY EMP_TYPE 
) A
ON STG.EMP_TYPE = A.EMP_TYPE
GROUP BY STG.EMP_TYPE, DEPT,TOTAL_COUNT;

可能な限り DISTINCT の代わりに GROUP BY を使用すると、実行時間を短縮できます。上記の「考慮してください」で述べたように、GROUP BY はインデックスを利用します。

于 2015-12-14T11:10:19.000 に答える