6

スピードや効率に関係しているので、準備されたステートメントを理解できません。プリペアドステートメントはデータベースサーバー上でコンパイルされ、何度も使用できることを読みました。

しかし、私がWebページを持っているとしましょう。1つのクエリを実行します。次の人がページを表示します。同じクエリで、そのユーザーのパラメータが異なります。

Webページへの2回目のヒットで、プリペアドステートメントはdbmsを調べて、その特定のクエリがデータベースサーバーにすでに存在するかどうかを確認していますか?ステートメントがコンパイルされ、「何度も」実行できると言うことの意味がわかりません。ページを実行するたびに準備しませんか?

また、これはSQLインジェクションに関するものではありません。これは、コンパイルに関連しているので、私が理解している部分の1つです。

ありがとう。

編集:検索しましたが、答えが見つかりません。私はこの質問に導かれるだけです。

編集:以下のコメントに基づいて、私のシナリオを考えると、効率のメリットはわかりません。セキュリティはい。コンパイルされたもの全体。いいえ。効率の問題を解決する例として挙げることができるシナリオはありますか?

4

1 に答える 1

3

最初の実行中に作成されるクエリプランは、データベース(データベースに接続し、同じクエリを実行するすべてのアプリケーションにメリットを提供する可能性があります)またはデータベースドライバー(アプリケーションにメリットを提供する)のいずれかによってキャッシュされます。再起動されない限り)。「ソフト解析」は実行ごとに実行されますが、通常ははるかに安価です。

マイレージは、データベースタイプ、ドライバーなどによって異なる場合があることに注意してください。ステートメントキャッシュも通常は制限されています。つまり、特定の数のステートメントのみがキャッシュに保持されます。

Ask Tomは、ソフト解析とハード解析の違いに関するいくつかの回答を提供します。

于 2013-01-09T11:17:03.043 に答える