1

以下のクエリがあり、許容できないほど長い時間実行されているとしましょう...クエリを最適化するためにどのインデックスを作成する必要があるかをクエリから判断するにはどうすればよいですか?

SELECT 句のフィールドからインデックスを作成すると役に立ちますか?

それとも、WHERE 条件のフィールドに基づいてのみインデックスを作成する必要がありますか?

CASE 句にも条件があることを考えると、それらのフィールドのインデックスを作成することも役に立ちますか?

SELECT A.ALPHA,
       C.BETA, 
       A.KAPPA AS DELTA,
       A.ECHO,
       B.FOXTROT,
       D.GAMMA,
       CASE WHEN (D.THETA IN ('B', '3', '4', 'F', 'D', 'H') OR (D.THETA = 'E' AND D.EPSILON <> '9'))
            THEN D.MU
            WHEN D.THETA = 'E' AND D.EPSILON = '9'
            THEN D.IOTA
            ELSE D.PHI END AS PHI,
       D.CHI,
       CASE WHEN D.THETA LIKE '1%' 
            THEN '1'
            WHEN D.THETA LIKE 'P%' 
            THEN '2'
            WHEN (THETA IN ('B', '3', '4') OR (THETA = 'E' AND PSI <> 'S'))
            THEN '3' 
            WHEN (THETA in ('F', 'D', 'H') OR (THETA = 'E' AND PSI = 'S'))
            THEN '4'
            END AS OMEGA,
       CASE WHEN B.FOXTROT IN (SELECT DISTINCT FOXTROT FROM TAPPLE)
            THEN 'Y'
            ELSE 'N' END AS ZETA,
       CASE WHEN D.THETA LIKE 'E%' AND D.PSI <> 'S'
            THEN D.TAU
            WHEN D.THETA LIKE 'B%' 
            THEN D.TAU
            WHEN D.THETA LIKE '3%' 
            THEN DATE(D.SIGMA)
            WHEN D.THETA LIKE '4%' 
            THEN DATE(D.SIGMA)
            ELSE NULL END AS RHO
FROM TORANGE A,
     TLIME B,
     (SELECT FOXTROT,BETA FROM TLIME, TLEMON WHERE OMICRON='L' AND ECHO = BETA AND LAMBDA = 'M') C,
     TGRAPE D
WHERE A.ECHO = B.ECHO
  AND B.FOXTROT = C.FOXTROT
  AND B.OMICRON = 'O'
  AND B.FOXTROT = D.FOXTROT
  AND D.THETA IN ('1', 'B', '3', '4', 'E', 'F', 'D', 'H')
;
4

1 に答える 1

0

LUW に DB2 を使用している場合は、実際のクエリをDB2 Design Advisorにフィードできます。これにより、期待されるクエリ パフォーマンスを改善するためのインデックスやその他のアプローチが提案される場合があります。

于 2013-09-13T12:17:10.527 に答える