MySQL DateTime объединяет две большие таблицы - PullRequest
0 голосов
/ 28 июня 2018

У меня есть две таблицы, и я хочу объединить их и суммировать некоторые столбцы. Критерии объединения должны заключаться в том, что время таблицы A находится в пределах 1 и 5 минут от времени таблицы B.

То есть B.time <= A.time <= B.time + (1 | 5) минут </p>

Вот код, и у меня есть индексы (btree) в обоих столбцах даты и времени. Но, похоже, работает СУПЕР МЕДЛЕННО. Что-нибудь, что я могу сделать по-другому?

SELECT
    a.Name,
    SUM(b.UnitsSold),
    SUM(b.Revenue),
    SUM(c.UnitsSold),
    SUM(c.Revenue)
FROM cars a
INNER JOIN sales b
ON
    b.Datet <= a.Datet
    and a.Datet <= DATE_ADD(b.Datet, INTERVAL 1 MINUTE)
INNER JOIN sales c
ON
    c.Datet <= a.Datet
    and a.Datet <= DATE_ADD(c.Datet, INTERVAL 5 MINUTE)
GROUP BY
    a.name

1 Ответ

0 голосов
/ 28 июня 2018

Как упоминалось ранее, без выборочных данных, желаемых результатов и объяснения логики того, что вам нужно, трудно помочь, но вот потенциальное решение, которое вы можете попробовать:

Создайте два новых столбца в своей таблице продаж (Datet_b и Datet_c), а при вставке / обновлении запустите функцию DATE_ADD, чтобы заполнить их.

Добавьте индексы для этих двух столбцов, а затем выполните приведенный выше запрос без функции DATE_ADD.

Запустите запрос, и производительность должна быть немного лучше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...