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