Create SQL indices on energy log DB for improved resampling performance

This speeds up resampling at startup by approx 15 times.
create-indices
Michael Zanetti 2022-09-22 13:00:47 +02:00
parent 161c237427
commit fb591e79e0
1 changed files with 11 additions and 0 deletions

View File

@ -7,6 +7,7 @@
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QSqlIndex>
#include <QSettings>
#include <QLoggingCategory>
@ -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.";