> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> データスキッピングインデックスの操作に関するドキュメント

# データスキッピングインデックスの操作

以下の操作を実行できます。

<div id="add-index">
  ## ADD INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] ADD INDEX [IF NOT EXISTS] name expression TYPE type [GRANULARITY value] [FIRST|AFTER name]` - テーブルのメタデータに索引の定義を追加します。

<div id="drop-index">
  ## DROP INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] DROP INDEX [IF EXISTS] name` - テーブルのメタデータから索引の定義を削除し、ディスク上の索引ファイルを削除します。[mutation](/ja/reference/statements/alter/index#mutations) として実装されています。

<div id="materialize-index">
  ## MATERIALIZE INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] MATERIALIZE INDEX [IF EXISTS] name [IN PARTITION partition_name]` - 指定した `partition_name` のセカンダリ索引 `name` を再構築します。[mutation](/ja/reference/statements/alter/index#mutations) として実装されています。`IN PARTITION` 部分を省略した場合は、テーブル全体のデータに対して索引を再構築します。

[`MATERIALIZE COLUMN`](/ja/reference/statements/alter/column#materialize-column) は、`MATERIALIZE INDEX` を完全に代替するものではありません。**wide + full-storage** のパーツでは、**スタンドアロン**のスキップ索引 (またはテキスト索引) ファイルを更新せずにカラム値を書き換える可能性があります。`skp_idx.packed` に格納される通常のスキップ索引は例外で、wide + full-storage パーツでも強制的に再計算できます (デフォルトの [`packed_skip_index_max_bytes`](/ja/reference/settings/merge-tree-settings/other#packed_skip_index_max_bytes) 未満の小さなスキップ索引サブストリーム。全文索引はこの方法ではパックされません) 。**wide + full-storage 以外のすべてのパーツ** (**compact + full**、**compact + packed**、**wide + packed** を含む) では、パーツ全体を書き換えることで既存の索引を再計算できます。小さなパーツは、デフォルトで full パーツストレージを使用している場合でも、通常は compact です。既存データのあるテーブルに索引を追加した場合 (メタデータのみの `ADD INDEX`) や、wide+full-storage パーツでカラムを書き換えた後にスタンドアロン索引ファイルをすぐに再構築する必要がある場合は、**決定論的かつ即時に**処理できる `MATERIALIZE INDEX` を使用します。履歴パーツに新たに追加された索引 (テキスト索引を含む) も、[`materialize_skip_indexes_on_merge`](/ja/reference/settings/merge-tree-settings/materialize#materialize_skip_indexes_on_merge) が有効で、かつ [`exclude_materialize_skip_indexes_on_merge`](/ja/reference/settings/merge-tree-settings/exclude#exclude_materialize_skip_indexes_on_merge) によって索引が除外されていなければ、後続のマージでマテリアライズできます。それ以外の場合は、明示的に `MATERIALIZE INDEX` を実行するまでマテリアライズされません。

<div id="clear-index">
  ## CLEAR INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] CLEAR INDEX [IF EXISTS] name [IN PARTITION partition_name]` - 定義を削除せずに、ディスク上のセカンダリ索引ファイルを削除します。[mutation](/ja/reference/statements/alter/index#mutations) として実装されています。

`ADD`、`DROP`、`CLEAR` コマンドは、メタデータを変更するかファイルを削除するだけであるという意味で軽量です。
また、これらはレプリケーションされ、ClickHouse Keeper または ZooKeeper を介して索引メタデータが同期されます。

<Note>
  索引の操作は、[`*MergeTree`](/ja/reference/engines/table-engines/mergetree-family/mergetree) エンジンのテーブル ([replicated](/ja/reference/engines/table-engines/mergetree-family/replication) バリアントを含む) でのみサポートされます。
</Note>

<div id="concurrent-alter-and-multi-clause-materialize-index">
  ## 同時実行 `ALTER` と複数句の `MATERIALIZE INDEX`
</div>

レプリケートテーブルでは、1 つのテーブルに対して個別の `ALTER` を短時間に連続して実行すると、先行する `ALTER` がまだレプリカに適用されていない場合に `CANNOT_ASSIGN_ALTER` (コード 517) が発生することがあります (メタデータの反映が遅れているためで、先行する alter がすでに割り当てられた後もこの状態が続くことがあります) 。これは mutation のみに限らない、同時実行されるメタデータ `ALTER` / mutation に関する一般的な状態です。直列化して再試行するか、[`mutations_sync`](/ja/reference/settings/session-settings/mutations#mutations_sync) / [`system.mutations`](/ja/reference/system-tables/mutations) の `is_done` を使用して、先行する mutation を生成する alter の完了を待ってください。また、文法上可能であれば、独立したメタデータ操作を複数句からなる 1 つの `ALTER` にまとめてください。[ALTER クエリの同期性](/ja/reference/statements/alter/index#synchronicity-of-alter-queries)および[同一テーブルにおける同時 ALTER の割り当て](/ja/reference/statements/alter/index#concurrent-alter-assignment-on-one-table)を参照してください。

複数の `MATERIALIZE INDEX` 句を 1 つの `ALTER` に含めることができます。ツリー内でカバーされているケースは、複数の `ADD INDEX` 句と、それらの新しい索引に対する `MATERIALIZE INDEX` を 1 つのステートメントにまとめるものです (`tests/queries/0_stateless/02911_add_index_and_materialize_index.sql`) 。この一括指定形式は通常の (非 `DatabaseReplicated`) データベース用です。`DatabaseReplicated` は、`ADD INDEX` と `MATERIALIZE INDEX` が混在するセグメントを `QUERY_IS_PROHIBITED` で拒否します。既存の索引に対する materialize のみの複数句形式も、現行実装では同じメタデータスナップショット準備パスをたどりますが、この正確な形式はまだ対象を絞った stateless テストでカバーされていません。そのようなテストでカバーされるまでは、個別に保証された仕様ではなく、現行実装の動作として扱ってください。順序どおりに適用するには、ステートメントごとに 1 つの `MATERIALIZE INDEX` を実行し、[`mutations_sync`](/ja/reference/settings/session-settings/mutations#mutations_sync) で完了を待ってください。
