Я работаю над системой обнаружения ботов, которая помогает мне запускать ML для идентификации этого трафика.
Короче говоря, у меня есть две таблицы:
- Одна таблица содержит все данные журнала сервера (запросы на второй уровень) со столбцом даты и времени
- Одна таблица, в которой есть строка для исключительного события, которое я определил. (со столбцом даты и времени)
Мне нужно присоединиться к таблице 2 с 1 и получить список запросов к серверу за 1 и 5 минут до каждого исключительного события.
Итак, у меня есть две таблицы, и я хочу объединить их и суммировать столбец запроса сервера. Критерии объединения должны заключаться в том, что время таблицы A находится в пределах 1 и 5 минут от времени таблицы B.
То есть B.time <= A.time <= B.time + (1 | 5) минут </p>
Вот код, и у меня есть индексы (btree) в обоих столбцах даты и времени. Но, похоже, работает СУПЕР МЕДЛЕННО. Что-нибудь, что я могу сделать по-другому?
Таблица журнала содержит несколько миллионов строк, а таблица исключений - около 3000.
SELECT
a.Name AS ExceptionName,
SUM(b.Requests) AS Requests1MBefore,
SUM(c.Requests) AS Requests5MBefore,
FROM exceptions a
LEFT JOIN log b
ON
b.Datet <= a.Datet
and a.Datet <= DATE_ADD(b.Datet, INTERVAL 1 MINUTE)
LEFT JOIN log c
ON
c.Datet <= a.Datet
and a.Datet <= DATE_ADD(c.Datet, INTERVAL 5 MINUTE)
GROUP BY
a.name
Я ожидаю, что вывод будет объединенной таблицей, которая выглядит следующим образом:
Exception Name | Requests1MBefore | Requests5MBefore
Event1 | 50 | 500
Event2 | 10 | 1000
....