There were some resources describing the same problem with other DBMSs in Qt. All of them offered to add qry.setForwardOnly(true)and qry.prepare(queryString);to configure the query.
, , Qt, . , QSql.
QSqlQuery qry(queryString);
qry.setForwardOnly(true);
qry.prepare(queryString);
QElapsedTimer timer;
timer.start();
if(qry.exec()) {
qDebug() << "time to execute query: " << timer.elapsed() << "ms";
timer.start();
while(qry.next()) {
}
qDebug() << "time to iterate through query results: " << timer.elapsed() << "ms";
}
, 50 , 3000 , 100 SELECT.
, . , , . OCI OCI_ATTR_PREFETCH_ROWS, 1. .
_db = QSqlDatabase::addDatabase("QOCI");
_db.setHostName(host);
_db.setDatabaseName(dbName);
_db.setPort(port);
_db.setUserName(user);
_db.setPassword(pwd);
_db.setConnectOptions("OCI_ATTR_PREFETCH_ROWS=1000");
_db.open();
, - , , , select Qt. , OCI_ATTR_PREFETCH_ROWS. qry.value(...) (QSqlRecord), , OCI_ATTR_PREFETCH_ROWS = 1 , qry.next() - , . , .
, -, , .