Sql 确定应该在DB2中创建哪些索引以优化特定查询的性能

Sql 确定应该在DB2中创建哪些索引以优化特定查询的性能,sql,indexing,db2,query-optimization,Sql,Indexing,Db2,Query Optimization,假设我有下面的查询,它运行的时间长得令人无法接受。。。如何从查询中确定应该创建哪些索引来优化它 从SELECT子句中的字段创建索引是否有帮助 或者我应该只基于WHERE条件中的字段创建索引吗 考虑到我在CASE子句中也有条件,为这些字段创建索引也会有帮助吗 SELECT A.ALPHA, C.BETA, A.KAPPA AS DELTA, A.ECHO, B.FOXTROT, D.GAMMA, CASE WHE

假设我有下面的查询,它运行的时间长得令人无法接受。。。如何从查询中确定应该创建哪些索引来优化它

从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')
;

如果您使用的是DB2 for LUW,则可以将实际查询提供给,这可能会建议索引和其他方法来提高预期的查询性能。

编辑以表明这是特定于平台的答案@mustaccio可能假设OP正在使用LUW,尽管没有指明。这个问题的答案可能是特定于平台的,但寻求这个问题答案的人可能来自任何DB2环境。