MySQL DateTime объединяет две большие таблицы

0

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

Таким образом B.time <= A.time <= B.time + (1 | 5) минут

Вот код, и у меня есть индексы (btree) для обоих столбцов datetime. Но, похоже, SUPER SLOW работает. Все, что я могу сделать по-другому?

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
  • 0
    Запросы неравенства действительно медленные. Я бы предложил вам задать вопрос с образцами данных, желаемыми результатами и более полным объяснением логики, которую вы хотите.
  • 0
    Я согласен с @Gordon Linoff, что вам будет гораздо легче помочь, если вы предоставите образец данных и образец желаемого результата. При этом ваш код выглядит вполне законным, но серверу приходится делать 8 вычислений для каждой записи (а также два внутренних соединения). Поэтому, особенно если мы говорим о тысячах записей, неудивительно, что они работают медленно. Можете ли вы ограничить количество включаемых записей простым предложением WHERE (например, WHERE date> = "2018-01-01")? Это помогло бы, потому что механизм запросов может исключать соответствующие записи перед выполнением других вычислений.
Теги:
join

1 ответ

0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню