From fb591e79e071368b69fb306f70ae214ade0b8515 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 22 Sep 2022 13:00:47 +0200 Subject: [PATCH] Create SQL indices on energy log DB for improved resampling performance This speeds up resampling at startup by approx 15 times. --- plugin/energylogger.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/plugin/energylogger.cpp b/plugin/energylogger.cpp index 83d180c..71877cd 100644 --- a/plugin/energylogger.cpp +++ b/plugin/energylogger.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -453,6 +454,11 @@ bool EnergyLogger::initDB() return false; } } + m_db.exec("CREATE INDEX IF NOT EXISTS idx_powerBalance ON powerBalance(sampleRate, timestamp);"); + if (m_db.lastError().isValid()) { + qCWarning(dcEnergyExperience()) << "Error creating powerBalance table index in energy log database. Driver error:" << m_db.lastError().driverText() << "Database error:" << m_db.lastError().databaseText(); + return false; + } if (!m_db.tables().contains("thingPower")) { qCDebug(dcEnergyExperience()) << "No \"thingPower\" table in database. Creating it."; @@ -470,6 +476,11 @@ bool EnergyLogger::initDB() return false; } } + m_db.exec("CREATE INDEX IF NOT EXISTS idx_thingPower ON thingPower(thingId, sampleRate, timestamp);"); + if (m_db.lastError().isValid()) { + qCWarning(dcEnergyExperience()) << "Error creating thingPower table index in energy log database. Driver error:" << m_db.lastError().driverText() << "Database error:" << m_db.lastError().databaseText(); + return false; + } if (!m_db.tables().contains("thingCache")) { qCDebug(dcEnergyExperience()) << "No \"thingCache\" table in database. Creating it.";