ВНЕШНЕЕ СОЕДИНЕНИЕ В DATETIME, вызывающее декартово соединение в MySQL 5.7

Я перевожу систему (в настоящее время работающую в базе данных MySQL 5.5) в AWS (работающую в MySQL 5.7). Я сталкиваюсь с проблемой производительности, когда ряд запросов, которые нормально работают на старой системе, работают на новой очень медленно. План объяснения некоторых проблемных запросов показывает декартово объединение, возникающее при объединении двух временных таблиц в полях DATETIME. Я проверил и перепроверил определения таблиц и не могу найти никакой разницы между старой и новой системой. Очевидно, мой Google Fu слабый, потому что я не могу найти никаких ссылок на эту проблему при миграции. Один из примеров запросов

SELECT 
    cal.CalDate DateAndTime,
    MAX(COALESCE(wat.WaterUsed, 0)) Water
FROM
    (SELECT 
        (wt.`Date` + INTERVAL wt.`Interval` HOUR) wtDate,
            wt.WaterUsed WaterUsed,
            wt.Sensor_SN waterSensorSN
    FROM
        Water_Used_Log wt
    WHERE
        wt.Controller_ID IN (752)
            AND wt.Sensor_SN = 'PFS0782'
            AND (wt.`Date` + INTERVAL wt.`Interval` HOUR) BETWEEN DATE_SUB('2017-09-01 00:00', INTERVAL 1 HOUR) AND '2018-08-31 23:00') wat
        RIGHT OUTER JOIN
    Calendar cal ON cal.CalDate = wat.wtDate
WHERE
    cal.CalDate BETWEEN DATE_SUB('2017-09-01 00:00',
        INTERVAL 1 HOUR) AND '2018-08-31 23:00'
GROUP BY DateAndTime
ORDER BY DateAndTime ASC;

План объяснения MySQL 5.7:

MySQL 5.7 объяснить план

Какие-либо предложения?

0 ответов

Другие вопросы по тегам