SQL Serverデータベースに接続するために、次のコードを使用しています。私は、同じ機能を使用しても問題なく他のすべてのクエリを実行できます。しかし、1つのクエリはSql管理スタジオで実行され、RではRODBCを〜11秒で使用しますが、C++を使用して(SQLExecDirect関数では)1時間以上かかります。他の誰かがこの問題を抱えていましたが、どのように解決しましたか?C++、Sql Server、およびODBC接続を使用した非常に長いクエリの実行
std::string sqlQuery="[myquery]";
SQLHANDLE sqlconnectionhandle;
SQLAllocHandle(SQL_HANDLE_DBC, sqlenvhandle, &sqlconnectionhandle);
SQLCHAR retconstring[1024];
SQLDriverConnect (sqlconnectionhandle, NULL,
conn_str,
len, retconstring, 1024, NULL,SQL_DRIVER_NOPROMPT);
SQLHANDLE sqlstatementhandle;
SQLAllocHandle(SQL_HANDLE_STMT, sqlconnectionhandle, &sqlstatementhandle);
//this is where the program "hangs" for over an hour
if(SQL_SUCCESS!=SQLExecDirect(sqlstatementhandle, (SQLCHAR*)(sqlQuery.c_str()), SQL_NTS)){
show_error(SQL_HANDLE_STMT, sqlstatementhandle, errorMsg);
return;
}
int numRow=0;
while(SQLFetch(sqlstatementhandle)==SQL_SUCCESS){
for(int i=1; i<=numFields+1; ++i){
double myVal;
SQLGetData(sqlstatementhandle, i, SQL_C_DOUBLE, &myVal, 0, NULL);
cb(myVal, numRow, i-1); //callback function defined elsewhere
}
numRow++;
}
SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle);
SQLDisconnect(sqlconnectionhandle);
SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle);
クエリを編集できますか? – Laurijssen
[アプリケーションが遅く、SSMSは高速ですか?](http://www.sommarskog.se/query-plan-mysteries.html) – TheGameiswar
@ServéLaurijssenその仕事に関連して、私は本当にしたくありません。それはいくつかの結合と集約を持つ些細なクエリではなく、何もクレイジーではありません。他の複雑な照会には、同じパフォーマンスの問題はありません。 – user9403