我正在使用qt处理数据库。我需要的一件事是检索表的某些部分,其中一些键集作为输入数据。这是我使用的代码:
bool getData(const QList<int> &idlist, QVector<DataStruct> &result)
{
result.resize(idlist.size());
QSqlDatabase &dbase = QSqlDatabase::database(conname); //conname is the QString holding the name of a connection
if (!dbase.transaction())
return false;
QString queryString(
"SELECT <column list> "
"FROM MyTableAS k "
"JOIN JoinedTable AS d ON k.foreign_key=d.primary_key "
"WHERE k.key=:key");
QSqlQuery *query = new QSqlQuery(QSqlDatabase::database(conname));
if(!query->prepare(queryString))
{
delete query;
dbase.rollback();
return false;
}
for (int i = 0; i < idlist.size(); i++)
{
query->bindValue(":key",idlist[i]);
if (!query->exec())
{
delete query;
dbase.rollback();
return false;
}
DataStruct &k = result[i];
memset(&k,0,sizeof(DataStruct));
if(query->next())
{
// fields of structure are mapped to query results
}
//result.append(k);
}
dbase.commit();
delete query;
return true;
}
我在想,如何加快检索速度。我应该更改查询 - 如果是,如何更改?我应该在这里使用交易吗?我应该改变我使用数据库的方式吗?
提前感谢!
答案 0 :(得分:0)
查询似乎写得很好(好吧,显式列列表比使用*
更好,但这对性能的影响很小。)
您可以通过在MyTable(key)
上添加索引来加快查询速度。您应该已经在主键上有一个索引,如果它被声明为。