Я пытаюсь оптимизировать запрос sql для большой таблицы событий (10 миллионов + строк) для поиска по диапазону дат. У меня уже есть уникальный индекс для этой таблицы, который (крышка, сделал, измерение, дата). Запрос ниже пытается получить событие трех типов измерения (киловатты, ток и напряжение) для каждого 2-секундного интервала в столбце даты:
SELECT *, FLOOR(UNIX_TIMESTAMP(date)/2) AS timekey
from events
WHERE lid = 1
and did = 1
and measurement IN ("Voltage")
group by timekey
UNION
SELECT *, FLOOR(UNIX_TIMESTAMP(date)/2) AS timekey
from events
WHERE lid = 1
and did = 1
and measurement IN ("Current")
group by timekey
UNION
SELECT *, FLOOR(UNIX_TIMESTAMP(date)/2) AS timekey
from events
WHERE lid = 1
and did = 1
and measurement IN ("Kilowatts")
group by timekey
Это таблица, которую я пытаюсь найти.
=============================================================
id | lid | did | measurement | date
=============================================================
1 | 1 | 1 | Kilowatts | 2020-04-27 00:00:00
=============================================================
2 | 1 | 1 | Current | 2020-04-27 00:00:00
=============================================================
3 | 1 | 1 | Voltage | 2020-04-27 00:00:00
=============================================================
4 | 1 | 1 | Kilowatts | 2020-04-27 00:00:01
=============================================================
5 | 1 | 1 | Current | 2020-04-27 00:00:01
=============================================================
6 | 1 | 1 | Voltage | 2020-04-27 00:00:01
=============================================================
7 | 1 | 1 | Kilowatts | 2020-04-27 00:00:02
=============================================================
8 | 1 | 1 | Current | 2020-04-27 00:00:02
=============================================================
9 | 1 | 1 | Voltage | 2020-04-27 00:00:02
Ожидаемый результат - получение всех данных, дата которых равна 2020-04-27 00: 00:00 и 2020-04-27 00:00:02. Приведенный выше запрос работает как положено. Но я использую UNION для просмотра различных измерений в таблице, и я считаю, что это может быть неоптимальный способ сделать это.
Может ли любой эксперт SQL помочь мне настроить запрос, который я должен увеличить производительность?