# 実行計画キャッシュ
+ `v6.1.0` 以降、デフォルトで有効になっています
+ 準備:クエリは抽象構文木 `(AST)` に解析され、キャッシュされます
+ `(1st)` を実行:
  + 実行計画は`AST`とパラメータ値 (ある場合) に基づいて生成されます
  + `LRU`リンクリストで実装されたプランキャッシュにプランを入れてください
+ `(2nd+)` を実行:プランキャッシュから実行計画を取得
```
tidb> SELECT @@~!@tidb_enable_prepared_plan_cache@!~;
+-----------------------------------+
| @@tidb_enable_prepared_plan_cache |
+-----------------------------------+
|                                 ~!@1@!~ |
+-----------------------------------+
```
![`smart`](./student-guide/diagram/ExecutionPlanCache_en_001_20220810.png)
-----------------------------
準備時に、パラメータ化されたクエリは抽象構文ツリー `(AST)` に解析されてキャッシュされます。後で実行すると、保存された `AST` と特定のパラメータ値に基づいて実行計画が生成されます。

実行計画キャッシュが有効になっている場合、すべてのPrepareステートメントは最初の実行で現在のクエリが実行計画キャッシュを使用できるかどうかを確認し、クエリがそれを使用できる場合は、生成された実行計画をLeast Recently Used `(LRU)`リンクリストによって実装されたキャッシュに入れます。後続の Execute クエリでは、実行計画がキャッシュから取得され、可用性がチェックされます。チェックが成功すると、実行計画を生成するステップはスキップされます。それ以外の場合は、実行計画が再生成され、キャッシュに保存されます。