# `DEALLOCATE PREPARE`は無視して
+ 同じセッション内の SQL ステートメントの構文解析コストを削減するには
+ オプション A:
  + **`DEALLOCATE PREPARE`** (サーバー側) と**`$stmt->close()`**または**`$stmt->closeCursor()`** (プロトコル) は控えめに使用する
+ オプション B:
  + プリペアドステートメントプランキャッシュからの割り当てを解除するコマンドは無視する
  + セッションで **`tidb_ignore_prepared_cache_close_stmt`** システム変数を `1` に設定する

```
tidb> SET ~!@tidb_ignore_prepared_cache_close_stmt@!~=1;
Query OK, 0 rows affected (0.00 sec)

tidb> SELECT @@tidb_ignore_prepared_cache_close_stmt;
+-----------------------------------------+
| @@tidb_ignore_prepared_cache_close_stmt |
+-----------------------------------------+
|                                       1 |
+-----------------------------------------+
1 row in set (0.00 sec)
```
--------------------------------------------------------------------------------

SQL ステートメントの構文解析コストを削減するには、prepare ステートメントを 1 回実行してからステートメントを複数回実行してから、deallocate prepare を実行することをお勧めします。

`$stmt` については後ほど説明します。`prepare()` によって `PDO` オブジェクト `(PDO_MySQL)` または `mysqli` インスタンス `(mysqli)` から返されます。

詳細については、https://docs.pingcap.com/tidb/dev/sql-prepared-plan-cache を参照する。