1

次のようなパラメーター化された SQL ステートメントがある場合:

SELECT * FROM table WHERE my_field = :field_value

PDOがこれ(以下を参照)を同じSQL文として認識し、完全に異なるSQL文であると想定する代わりにキャッシュを使用するかどうかは誰にもわかりません:

SELECT * FROM table WHERE my_field = :new_field_value

したがって、問題は次のとおりだと思います。パラメーター化された選択ステートメントでパラメーターの名前が変更されたが、他に何も変更されていない場合でも、キャッシュのパフォーマンス上の利点は得られますか? または、パラメーター名が同じままであることを確認する必要がありますか?

4

4 に答える 4

4

PDO_MySQL を使用している場合、PDO::ATTR_EMULATE_PREPARESfalse に設定しない限り、サーバーがそれらを見る前に、準備されたステートメントを生の SQL に書き換えます。

于 2008-12-18T17:58:20.010 に答える
1

クエリ パラメータが値に置き換えられた後にキャッシュが行われるため、同じステートメントとして認識されるはずです。

于 2008-12-18T13:40:07.487 に答える
0

PDO にはキャッシュがありませんが、MySql にはキャッシュがあります。はい、クエリキャッシュに「最終」クエリをキャッシュします。それだけでなく、同じ準備済みステートメントを複数回使用すると、MySql がそのステートメントのクエリ実行プランをキャッシュできるため、さらに速度が向上します。

于 2008-12-18T17:52:30.817 に答える
0

PDO が名前付きパラメーターをどのように処理するかはわかりませんが、MySQL プリペアード ステートメントを使用する場合、クエリ キャッシュを使用するには MySQL 5.1.17 以降を使用する必要があります。

MySQL クエリ キャッシュ

MySQL 5.1.17 より前では、準備済みステートメントはクエリ キャッシュを使用しません。5.1.17 以降、準備されたステートメントは、準備方法によって異なる特定の条件下でクエリ キャッシュを使用します。

于 2008-12-21T05:53:28.687 に答える