2012-02-08 132 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