一見すると、SQLPrepare
+ SQLBindParameter
+ SQLExecute
をフォーマット文字列(例:CString::Format
)よりも使用し、完全なクエリ文字列全体をSQLExecDirect
に渡す方が効率的であるようです。そうでない場合、なぜ2番目の方法(SQLPrepare
+ SQLBindParameter
+ SQLExecute
)が存在するのでしょうか?SQLExecDirectをSQLPrepare + SQLBindParameter + SQLExecuteの代わりに書式設定済みのクエリ文字列と併用するのは悪い考えですか?
しかし、ここに私の考えがあります:ドライバーは遅かれ早かれ(私は後で、とにかく...)パラメータを変換する(私はそれをSQLBindParameter
で)文字列表現に変換しますか? (またはそうでないかもしれません)私のアプリケーション(printf
のような書式設定)でこの書式を設定すると、パフォーマンスが低下しますか?
ネットワーク経由で接続されているときに、パラメータを生データとして渡してサーバー側でフォーマットすると、事前にフォーマットされたクエリ文字列を渡す代わりにネットワークトラフィックが減少する可能性があります。瞬間。そうでない場合は、アプリケーションで完全なクエリ文字列をフォーマットしてからSQLExecDirect
を使用する代わりに、SQLPrepare
+ SQLBindParameter
+ SQLExecute
を使用するとパフォーマンスが向上しますか?
私にとってSQLExecDirect
を使用すると、より簡単で便利なので、私は別のアプローチを選択する必要があるかどうかについて(そしてもしあれば)良い答えが必要です。
重要:あなたはSQLPrepare
+ SQLBindParameter
+ SQLExecute
アプローチは、より良い性能を与えることを言うだろうならば、私はどのくらいを知りたいです!私は理論的な前提を気にしない、実際にはいつ価値があるのか知りたいのですが?私の現在のユースケースはあまりDB集約的ではありませんが、1秒あたり100個以上の挿入/更新はありません。SQLExecDirect
を使用してもよろしいですか?どのようなシナリオがありますか - それが今までなら、私はSQLPrepare
+ SQLBindParameter
+ SQLExecute
を使用する必要がありますか?
を**ありませんそうではありません...バインディングはシンプルであればクエリは短く、あなたが何をしているのかを知っている**特に、数字を含む短いもの(例えば、 'select * from table where id =#;')*。ドグマ*(以下の回答)*を無視して頭を使ってください。 :) – CodeAngry