# キャッシュテーブルの概要

+ テーブルのデータ量は大きくないです
+ 頻繁に変更されないテーブルだけを読み取るか変更するようにします
+ テーブルの読み取りアクセスは非常に頻繁です

![`smart`](HotSubtableCache_aa_002_20220509.png)

```
ALTER TABLE {table_name} ~!@CACHE@!~;
```

------------------------------------------------------------------------------
TiDBはバージョン6.0.0でキャッシュテーブル機能を導入しました。この機能は、頻繁にアクセスされてほとんど変更されないホットスポットの小さなテーブルに適用できます。つまり、テーブル全体のデータをTiDBサーバーのメモリにロードし、直接メモリからテーブルデータを取得し、TiKVサーバーからテーブルデータを取得することを回避し、読み取りパフォーマンスを向上させます。

TiDBサーバーのメモリーに既に作成されたテーブルをキャッシュするために、以下の方法を使用することができます：

```
CREATE TABLE users (
    id BIGINT,
    name VARCHAR(100),
    PRIMARY KEY(id)
);
ALTER TABLE users CACHE;
```

TiDBのキャッシュテーブル機能は、以下の特徴を持つテーブルに適用可能です：
- テーブルのデータ量は大きくないです。
- ほとんど変更されることがなく、読み取り専用です。
- テーブルへのアクセスが頻繁なので、より良い読み取りパフォーマンスを期待しています。

データ量が小さく、特にアクセスが頻繁なテーブルの場合、データがTiKVのあるリージョンに集中してホットスポットが形成され、パフォーマンスに影響を及ぼす可能性があります。そのため、TiDBのキャッシュテーブルの典型的な使用シナリオは以下の通りです。
- 静的な設定テーブル。ビジネスは設定テーブルを介して設定情報を読み取ります。
- テーブル形式で保存された為替レートを金融シーンで、リアルタイムで更新されないもので、一日一回更新されるもの。
- 銀行支店や小売店の検索テーブルですが、このテーブルは新しいレコード項目を殆ど追加しません。

例えば、ビジネスが再開するとき、すべてのセッションが同時に設定を読み込むため、データベースの読み取りレイテンシーが高くなる可能性があります。 キャッシュテーブルを使用すると、この問題を解決できます。

TiDBは、テーブルデータ全体をTiDBサーバーのメモリにロードするため、変更操作の後にキャッシュが無効になり、再ロードが必要なため、TiDBキャッシュテーブルは、比較的小さなテーブルのシナリオにのみ適しています。

現在、TiDBは、各キャッシュテーブルのサイズを64MBに制限しています。テーブルデータが64MBを超える場合、`ALTER TABLE ... CACHE`文の実行は失敗します。
