PostgreSQLには、テーブルの物理的な並び順を特定のインデックスに従って再配置するCLUSTERコマンドがあります。これにより、クエリの性能向上やI/O効率の改善を図ることができます。本記事では、CLUSTERコマンドの用途と使用方法、注意点を解説します。
CLUSTERコマンドの基本
CLUSTERは、指定したインデックスの順序に基づいてテーブル内の行を並べ替えるコマンドです。書式は以下の通りです。
CLUSTER table_name USING index_name;
これにより、table_nameのデータがindex_nameに従って物理的に再配置されます。
使用するメリット
テーブルがインデックス順に並ぶことで、範囲検索や順序付きクエリのパフォーマンスが向上することがあります。特に大規模データや頻繁に範囲検索を行うテーブルで効果が見込めます。
例えば、日時順に並べたインデックスでCLUSTERを行うと、最新データの検索が高速化されます。
注意点と制約
CLUSTERは一度実行するとテーブルの物理順序を変更しますが、その後のINSERTやUPDATEでは自動的に順序は維持されません。定期的なCLUSTERや適切なVACUUMとの併用が必要です。
また、CLUSTERはテーブル全体をロックするため、実行中は他の操作がブロックされる点にも注意が必要です。
実践例
売上データをsalesテーブルに格納し、sale_date_idxというインデックスがある場合、最新順に並べ替えるには。
CLUSTER sales USING sale_date_idx;
これにより、sale_date_idxの順序でテーブルが物理的に並び替えられ、最新売上の検索が効率化されます。
まとめ
PostgreSQLのCLUSTERコマンドは、特定インデックスに基づいてテーブルの行を物理的に並べ替えることで、検索性能やI/O効率を改善できる便利な機能です。ただし、実行中のテーブルロックや挿入後の順序維持などの制約もあるため、使用する際は注意が必要です。


コメント