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

+0

SQL_ATTR_ROW_ARRAY_SIZE> 1に設定するとより多くのメモリが必要ですが、より高速にする必要があります。 N行のデータとインジケータがSQLBindColに渡されるために、より多くの領域を割り当てることを忘れないでください。 – bohica

関連する問題