MySQLクライアント/サーバ・プロトコルは準備されたステートメントの使用を規定します。この能力には、mysql_stmt_init()
初期化機能によって戻されたMYSQL_STMT
ステートメントハンドラー・データ構造が使われています。準備された実行は1回以上ステートメントを実行する効率的な方法です。ステートメントはその実行のために最初解析されます。その後、それは初期化機能によって戻されたシテートメントハンドルを使って複数回実行されます。
準備された実行は、基本的にクエリの解析が一度だけなので、一度以上実行されるステートメントの実行を、直接実行するより素早く行います。直接実行の場合、クエリは実行のたびに解析されます。準備された実行はまた、実行のたびにパラメータにデータを送るだけで済むので、ネットワークの通信料を減らす効果があります。
準備されたステートメントは状況によっては、性能の増加をもたらさない場合があります。最も良い結果を得るため、準備されたステートメントと準備されていないステートメントの両方を使って、自分のアプリプリケーションをテストして、最もよい性能が得られる方を選んでください。
プリペアド ステートメントの他の利点は、クライアントとサーバ間のデータ伝達をより効果的にするバイナリ プロトコルを使用していることです。
次のステートメントは準備されたステートメントとして用いることができます:CREATE
TABLE
ステートメント、DELETE
ステートメント、DO
ステートメント、INSERT
ステートメント、REPLACE
ステートメント、SELECT
ステートメント、SET
ステートメント、UPDATE
並びに殆どのSHOW
ステートメント。
MySQL 5.1.10では、次のステートメントがサポートされています:
ANALYZE TABLE OPTIMIZE TABLE REPAIR TABLE
MySQL 5.1.12では、次のステートメントがサポートされています:
CACHE INDEX CHANGE MASTER CHECKSUM {TABLE | TABLES} {CREATE | RENAME | DROP} DATABASE {CREATE | RENAME | DROP} USER FLUSH {TABLE | TABLES | TABLES WITH READ LOCK | HOSTS | PRIVILEGES | LOGS | STATUS | MASTER | SLAVE | DES_KEY_FILE | USER_RESOURCES} GRANT REVOKE KILL LOAD INDEX INTO CACHE RESET {MASTER | SLAVE | QUERY CACHE} SHOW BINLOG EVENTS SHOW CREATE {PROCEDURE | FUNCTION | EVENT | TABLE | VIEW} SHOW {AUTHORS | CONTRIBUTORS | WARNINGS | ERRORS} SHOW {MASTER | BINARY} LOGS SHOW {MASTER | SLAVE} STATUS SLAVE {START | STOP} INSTALL PLUGIN UNINSTALL PLUGIN
他のステートメントはMySQL 5.1にサポートされていません。