0

多くの人々は、SQLインジェクション攻撃を防ぐためにパラメータ化されたクエリを使用することが重要であることを知っています。

クエリオプティマイザは実行前にすべてのパラメータ化されたSQLステートメントを再解析する必要がないため、オンライントランザクション処理を行う場合、パラメータ化されたクエリはsqliteとoracleでもはるかに高速です。パラメータ化されたクエリを使用するとsqliteが3倍速くなるのを見てきましたが、並行性が高い極端な場合には、パラメータ化されたクエリを使用するとoracleが10倍速くなる可能性があります。

mysql、ms sql、db2、postgresqlなどの他のdbはどうですか?

パラメータ化されたクエリとリテラルクエリのパフォーマンスに同等の違いはありますか?

4

2 に答える 2

2

MySQL に関して、MySQLPerformanceBlogは、準備されていないステートメント、準備されたステートメント、およびクエリ キャッシュされたステートメントを使用して、1 秒あたりのクエリのベンチマークをいくつか報告しました。彼らの結論は、準備されたステートメントは、MySQL で準備されていないステートメントよりも実際に14.5% 高速であるということです。詳細については、リンクをたどってください。

もちろん、比率はクエリによって異なります。

クライアントから RDBMS への余分なラウンドトリップを行っているため、オーバーヘッドがあると考える人もいます。1 回目はクエリを準備し、2 回目はパラメータを渡してクエリを実行します。

しかし実際には、これらは実際に測定せずに行われた誤った仮定です。どのブランドのデータベースでも、準備されたステートメントが遅いということは聞いたことがありません。

于 2010-04-28T20:23:28.790 に答える
1

私はほぼ常に速度の向上を見てきましたが、一般的には初めてです。プランがロードされてキャッシュされた後、さまざまな db エンジンがどちらのタイプでも同じように動作すると推測できます。

于 2009-08-23T09:35:12.253 に答える