gpt4 book ai didi

c++ - Qt SQLite搜索查询速度

转载 作者:行者123 更新时间:2023-11-28 05:07:07 24 4
gpt4 key购买 nike

我正在 SQLite 中创建一个数据库,如下所示:

QSqlQuery create_address;
create_address.prepare("CREATE TABLE addresses (addressid INTEGER PRIMARY KEY AUTOINCREMENT, address TEXT UNIQUE)");
QSqlQuery create_devices;
create_devices.prepare("CREATE TABLE devices (ch TEXT PRIMARY KEY, addressid INTEGER REFERENCES addresses(addressid))");

create_devices.exec();
create_address.exec();

我需要多次访问这个数据库(~660'000)传递ch并检索相应的地址,传递的ch不能在数据库中(返回空字符串)。

为此我做了以下查询

//outside loop
QSqlQuery find_address;
find_address.prepare("SELECT address FROM addresses,devices WHERE devices.addressid = addresses.addressid AND devices.ch = :chcode");

//in loop
find_address.bindValue(":chcode",QString::fromStdString(ch_code));

find_address.exec();

问题是这个过程非常慢(完成所有 660'000 次搜索需要将近 12 分钟)。

在此之前,我尝试使用 INNER JOIN,但性能几乎相同。

是否有更好的方法来编写查询和/或构造数据库以获得更快的执行时间?

最佳答案

因为你有一个带有 SQL 查询的循环,你可以将它包装到事务中,这可能会提高性能:

QSqlDatabase::database().transaction();
.........
// your loop
.........
QSqlDatabase::database().commit();

也可以通过添加索引来提高性能。在您的情况下,可以在 devices.addressiddevices.ch 字段上创建索引。在 sqlite 控制台中执行以下操作:

CREATE INDEX devices_index ON devices(ch, addressid);

关于c++ - Qt SQLite搜索查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44439050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com