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

Posted

技术标签:

【中文标题】确定应该在 DB2 中创建哪些索引以优化特定查询的性能【英文标题】:Determining what indexes should be created in DB2 to optimize the performance of a particular query 【发布时间】:2013-09-13 02:46:21 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

以上是关于确定应该在 DB2 中创建哪些索引以优化特定查询的性能的主要内容,如果未能解决你的问题,请参考以下文章

sql server都有哪些查询优化方法

sqlserver中创建一个表对象应该包括哪两个步骤?

为啥 DB2 不使用我的 MQT 表?

MongoDB 索引

一般在写SQL时需要注意哪些问题,可以提高查询的效率

MongoDB中索引的创建和使用详解