Наличие двух таблиц, таких как:
FOO(ID, A, B, C, D, E, G(timestamp))
BAR(ID, X, Y, Z, FK_FOO_ID, W)
и index
, таких как:
CREATE INDEX IDX_TEST ON FOO(G)
После запроса DESCRIBE
будет не использовать созданный индекс:
DESC SELECT F.A, F.B, F.C, F.D, F.E,
SUM(CASE WHEN B.X IN (0, 12) THEN B.Y ELSE 0.00 END) AS 'Something_1',
SUM(CASE WHEN B.X IN (0, 12) THEN B.Z ELSE 0.00 END) AS 'Something_2',
SUM(CASE WHEN B.X = 2 THEN B.Y ELSE 0.00 END) AS 'Something_3',
SUM(CASE WHEN B.X = 2 THEN B.Z ELSE 0.00 END) AS 'Something_4'
FROM FOO AS F
INNER JOIN BAR AS B ON F.ID = B.FK_FOO_ID
WHERE
(F.G > '2018-03-01 23:59:59' OR F.G IS NULL) AND
B.W <= '2018-03-01 23:59:59' AND
B.X IN (0, 2, 12)
GROUP BY
F.A,
F.B,
F.C,
F.D,
F.E;
, но с удалением F.G > '2018-03-01 23:59:59'
из предложения WHERE
, созданный индекс будет применен .Есть идеи почему?Как заставить MYSQL использовать индекс для столбца G
типа TIMESTAMP
?Любые идеи для лучшего индекса для создания с этим типом SELECT
запроса?