gpt4 book ai didi

sqlite - 获取 QSqlQuery 结果的性能非常慢

转载 作者:行者123 更新时间:2023-12-03 18:17:26 25 4
gpt4 key购买 nike

我在 Qt 的 sqlite 数据库中看到莫名其妙的缓慢行为。下面代码中的查询,当从同一数据库上的 sqlite 命令行实用程序执行时,会立即完成。

qDebug() << "Beginning" << QDateTime::currentDateTime ().toString(Qt::ISODate);
QSqlQuery q(QSqlDatabase::database(mFilename));
q.prepare( "select TextFormIndex.Id from TextFormIndex,MorphologicalAnalysisMembers,Allomorph on TextFormId=Id and AllomorphId=Allomorph._id where LexicalEntryId=:Id;" );
q.bindValue(":Id", id);

QSet<qlonglong> textFormIds;
if( !q.exec() )
{
qWarning() << "DatabaseAdapter::lexicalEntryTextForms" << q.lastError().text() << q.executedQuery();
return textFormIds;
}

qDebug() << "Before while" << QDateTime::currentDateTime ().toString(Qt::ISODate);
int nResults = 0;
while( q.next() )
{
qDebug() << nResults++ << QDateTime::currentDateTime().toString(Qt::ISODate);
q.value(0).toLongLong();
}
qDebug() << "After while";

此代码的调试输出为:
Beginning "2013-02-04T20:31:24" 
Before while "2013-02-04T20:31:26"
0 "2013-02-04T20:31:26"
1 "2013-02-04T20:31:27"
2 "2013-02-04T20:31:41"
3 "2013-02-04T20:31:44"
After while

不知何故,第三个电话需要十四秒钟。

这是大型项目中的单一方法。在此之前,我的所有查询都没有执行缓慢。
create table if not exists TextFormIndex ( TextName text, LineNumber integer, Id integer );
create table if not exists MorphologicalAnalysisMembers ( _id integer primary key autoincrement, TextFormId integer, AllomorphId integer, AllomorphOrder integer );
create table if not exists Allomorph ( _id integer primary key autoincrement, LexicalEntryId integer, WritingSystem integer, Form text );

MorphologicalAnalysisMembers.AllomorphId 对应于 Allomorph._id。 TextFormIndex.Id 对应于 MorphologicalAnalysisMembers.TextFormId。

MorphologicalAnalysisMembers 有 4082 行
TextFormIndex 有 17710 行
异形体有 1660 行

最佳答案

您的 Qt 中使用的 SQLite 版本似乎太旧了。

更新到最新的 Qt,或 recompile Qt with a newer SQLite .

关于sqlite - 获取 QSqlQuery 结果的性能非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14690679/

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