はじめに:大規模テーブルの「遅い…」を解決するカギ
Snowflakeを使っていると、テーブルが数億行・数TBになってきた頃から「同じクエリなのに前より遅くなった気がする…」と感じることがあります。その原因の多くは、データが物理的にバラバラに散らばっていて、目的の行を見つけるまでにたくさんのデータを読み込んでしまっていることにあります。
そこで登場するのが クラスタリングキー(Clustering Key) です。この記事では、データベース未経験の方でもイメージできるように、クラスタリングキーの仕組み・使い方・注意点をフレンドリーに解説していきます!

そもそもマイクロパーティションって何?
クラスタリングキーを理解するには、まず マイクロパーティション という単位を知っておく必要があります。Snowflakeはテーブルのデータを、内部的に16〜500MB程度の小さな塊(マイクロパーティション)に分割して保存しています。
クエリ実行時、Snowflakeは「このパーティションには欲しいデータが含まれているか?」を各パーティションのメタデータ(最小値・最大値など)で判断し、不要なものはスキップします。これを プルーニング(枝刈り) と呼びます。プルーニングがよく効くほど、読み込むデータ量が減って高速化します。
クラスタリングキーの役割
クラスタリングキーは、「このカラムで似た値同士を同じパーティションに集めておいてね」とSnowflakeに伝える指定です。たとえば order_date をクラスタリングキーにすると、同じ日付の注文データが同じパーティションに固まりやすくなります。
結果として、WHERE order_date = '2026-05-01' のような条件で検索したとき、関係ないパーティションを大きくスキップでき、クエリが劇的に速くなることがあります。
どんなテーブルに有効?
- 1TB以上の大規模テーブル(目安)
- 特定カラムでの絞り込み・JOIN・ORDER BYが頻繁に行われる
- 自然なロード順とアクセス順がズレている(例:後から過去日付のデータがバンバン入る)
逆に、小さいテーブルや、すでにロード順で十分整列しているテーブルでは、コストばかりかかって効果が薄いので注意です。
実際に設定してみよう
クラスタリングキーは CLUSTER BY 句で指定します。テーブル作成時にも、後から ALTER TABLE でも設定できます。
-- テーブル作成時に指定
CREATE TABLE sales (
order_id NUMBER,
order_date DATE,
region STRING,
amount NUMBER
)
CLUSTER BY (order_date, region);
-- 既存テーブルに後から追加
ALTER TABLE sales CLUSTER BY (order_date, region);
-- クラスタリングキーを解除
ALTER TABLE sales DROP CLUSTERING KEY;
キーは1つだけでなく複数カラムを指定できます。粒度の粗いカラム(日付など)を先頭にし、細かいカラムを後にするのがコツです。
クラスタリングの状態を確認する
「ちゃんと整列されているの?」を確認するには、SYSTEM$CLUSTERING_INFORMATION 関数を使います。
SELECT SYSTEM$CLUSTERING_INFORMATION('sales', '(order_date, region)');
返ってきたJSONの average_depth(重なり度合い)が小さいほど、よくクラスタリングされている状態です。値が大きすぎる場合は再クラスタリングが進行中か、キーの選び方を見直すサインかもしれません。

Automatic Clusteringと注意点
Snowflakeはクラスタリングキーが設定されたテーブルを 自動で再クラスタリング してくれます(Automatic Clustering)。手作業で並び替える必要はありません。ただし、再クラスタリングは クレジットを消費する ため、頻繁に大量更新が走るテーブルにキーを付けると思わぬコスト増になることも。
本当にクラスタリングキーが必要かどうかは、まずクエリプロファイルで実際のスキャン量やプルーニングの効きを確認してから決めるのが鉄則です。
まとめ
クラスタリングキーは、大規模テーブルのプルーニングを効かせて高速化する強力な仕組みです。一方で「とりあえず付ける」とコストがかさむため、テーブルサイズ・アクセスパターン・更新頻度を見極めて選びましょう。小〜中規模テーブルなら、SEARCH OPTIMIZATIONやマテリアライズドビューなど、別の高速化手段も検討してみてくださいね。
参考リンク
- クラスタリングキーとクラスタ化テーブル | Snowflake Documentation
- マイクロパーティションとデータクラスタリング | Snowflake Documentation
- 自動クラスタリング | Snowflake Documentation
関連記事
- Snowflakeクエリプロファイル入門|遅いクエリのボトルネックを見抜く方法 – クラスタリングキーの効果を確認するときに必須のツールです。
- SEARCH OPTIMIZATIONで爆速化!Snowflakeイテレーティブテーブル活用術 – ピンポイント検索向けのもう一つの高速化機能。
- Snowflakeビューとマテリアライズドビューの違い|初心者向け使い分けガイド – 集計クエリの高速化ならこちらも検討。

