2012-02-08 58 views
0

我的应用程序每秒钟向SQL Server数据库发出大约5次查询。每个查询的平均结果为1500行。该应用程序是用C++/QT编写的,数据库操作是使用QODBC驱动程序实现的。我确定查询处理需要大约25毫秒,但是获取结果 - 800毫秒。以下是代码查询数据库的方式:QODBS和SQL Server查询性能

QSqlQuery query(db) 
query.prepare(queryStr); 
query.setForwardOnly(true); 
if(query.exec()) 
{ 
    while(query.next()) 
    { 
     int v = query.value(0).toInt(); 
     ..... 
    } 
} 

如何优化结果提取?

回答

1

这并不能直接回答你的问题,因为我多年以来没有使用过QT。在实际的ODBC API中,通常可以通过将SQL_ATTR_ROW_ARRAY_SIZE设置为N来加快行的检索速度,那么每次对SQLFetch的调用一次返回N行。我在qt中查看了SqlQuery,并且无法看到这样做的方式,但它可能是您可以用QT查找或直接写入ODBC API的东西。你可以在Preparing to Return Multiple Rows

+0

找到一个例子谢谢你的回答。我刚刚使用本地API实现了这些东西,并得到了15毫秒!我将尝试设置你提到的参数 – Andrey 2012-02-08 18:25:53

+0

设置SQL_ATTR_ROW_ARRAY_SIZE> 1将需要更多的内存,但应该更快。不要忘记为传递给SQLBindCol的N行数据和指标分配更多空间。 – bohica 2012-02-08 21:15:55