如何以最快的方式通过键集从表中检索条目?

时间:2013-08-12 11:42:53

标签: c++ sql qt sqlite

我正在使用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;
}

我在想,如何加快检索速度。我应该更改查询 - 如果是,如何更改?我应该在这里使用交易吗?我应该改变我使用数据库的方式吗?

提前感谢!

1 个答案:

答案 0 :(得分:0)

查询似乎写得很好(好吧,显式列列表比使用*更好,但这对性能的影响很小。)

您可以通过在MyTable(key)上添加索引来加快查询速度。您应该已经在主键上有一个索引,如果它被声明为。