У меня есть эта база данных для хранения данных датчиков,
Приобретения (acq) поступают из разных управляющих модулей (cu) через фиксированные интервалы (дата-время)
Каждое Приобретение имеет много разных показателей, хранящихся в таблице данных
acq
id
datetime
id_cu
data
id
id_acq
id_meas
value
Мне нужен такой вид:
+---------------------+------+----+-----+
| datetime | v1 | v2 | v3 |
+---------------------+------+----+-----+
| 2010-09-13 00:05:00 | 40.9 | 1 | 0.3 |
| 2010-09-13 00:10:00 | 41.0 | 2 | 0.3 |
| 2010-09-13 00:15:00 | 41.1 | 4 | 0.3 |
+---------------------+------+----+-----+
AS:
v1 - это data.value (например, влажность)
ГДЕ acq.id_cu = 1 И data.id_meas = 100
v2 - это значение data.value (например, счетчик)
ГДЕ acq.id_cu = 2 И data.id_meas = 200
v3 - это data.value (например, температура)
ГДЕ acq.id_cu = 3 И data.id_meas = 300
и т. Д. До десятка комбинаций, выбранных пользователем
Я закончил с этим запросом, но он всегда требует очень небольшого количества данных по сравнению с тем, который будет в производстве
SELECT a1.datetime, d1.value, d2.value, d3.value
FROM
acq a1, data d1
JOIN acq a2, data d2
ON a2.id=d2.id_acq AND a2.datetime=a1.datetime
JOIN acq a3, data d3
ON a3.id=d3.id_acq AND a3.datetime=a1.datetime
WHERE a1.id=d1.id_acq
AND a1.id_cu=1 AND d1.id_meas=100
AND a2.id_cu=2 AND d2.id_meas=200
AND a3.id_cu=3 AND d3.id_meas=300
Полагаю, было бы намного быстрее получать данные отдельно для каждого условия a1.id_centr=x AND d1.id_meas=y
, а затем печатать данные, которые мне нужны, с моим приложением.
Каков наилучший (и правильный) способ добиться этого?
edit: при условии отсутствия недостатков в приобретениях, я имею в виду запуск этого:
SELECT datetime, value
FROM acq, data
WHERE acq.id=data.id_acq
AND (
id_cu=1 AND id_meas=100
OR id_cu=2 AND id_meas=200
OR id_cu=3 AND id_meas=300
)
ORDER BY id_cu, id_meas
результаты разделения по id_cu / id_meas меняются и отображаются рядом друг с другом с использованием языка программирования (например, python + numpy), это вопрос сотен секунд против ... минут?