# プライマリキーのクラスタ化インデックス
```
tidb> CREATE TABLE test.example_table1 (
  ~!@example_pk BIGINT AUTO_RANDOM PRIMARY KEY@!~,
  example_content VARCHAR(60)
);

tidb> CREATE TABLE test.example_table2 (
  ~!@example_pk CHAR(10) PRIMARY KEY CLUSTERED@!~,
  example_content VARCHAR(60)
);

tidb> CREATE TABLE test.example_table3(
  example_pk1 INT,
  example_pk2 VARCHAR(10),
  example_content VARCHAR(60),
  ~!@PRIMARY KEY (example_pk1, example_pk2) CLUSTERED@!~ 
);

tidb> SELECT TABLE_NAME, TIDB_PK_TYPE
  FROM information_schema.tables 
  WHERE table_schema = 'test' 
  AND table_name in ('example_table1','example_table2','example_table3');

+----------------+--------------+
| TABLE_NAME     | TIDB_PK_TYPE |
+----------------+--------------+
| example_table2 | ~!@CLUSTERED@!~    |
| example_table1 | ~!@CLUSTERED@!~    |
| example_table3 | ~!@CLUSTERED@!~    |
+----------------+--------------+
```
![`smart`](ClusteredTableWithPrimaryKey_ja_001_20231116.png)
------------------------------------------------------------------------------
リレーショナルデータベースでは、プライマリキーはテーブル内の各レコードの一意の識別子です。これにより、テーブルの各行が一意に識別され、NULL値があってはなりません。プライマリキーは、多くの場合、従来のRDBMSのユニークインデックスでサポートされています。これにより、データをすばやく取得できます。

クラスタド・インデックスは、インデックスされたカラムに基づいてテーブル内のデータ行の物理的な順序を決定します。テーブルにクラスタ化されたインデックスがある場合、行はインデックスと同じ順序でディスクに格納されます。この組織は、関連データがディスクにまとめて保存されるため、クエリのパフォーマンスを向上させることができます。

TiDBのクラスタド・インデックスのシナリオでは、テーブルの行はプライマリキーの順序に従ってディスク上に整理されます。これは、データ自体がプライマリキーの値に基づいてディスク上で物理的に順序付けられていることを意味します。テーブルのプライマリキーは、TiKV マップでマップされたキーと値のペアのキーと同じです。TiDBテーブルの行とTiKV ストアのキーと値のペアのエントリは1対1で対応しています。

TiKV KVエントリは次のキーと値で構成されています:
- キーは、テーブルIDのプレフィックスが付いたプライマリキーです。
- 値はプライマリキー以外の他のカラムから取得されます。


