ソートキー
注記
SORTKEY AUTO
を使用してテーブルを作成することをお勧めします。その場合、Amazon Redshift は自動テーブル最適化を使用してソートキーを選択します。詳細については、「自動テーブル最適化」を参照してください。このセクションの残りの部分では、ソート順について詳しく説明します。
テーブルの作成時に、代わりにその 1 つ以上の列をソートキーとして定義することもできます。データが空のテーブルに最初にロードされると、行がディスク上にソート順に格納されます。ソートキー列に関する情報がクエリプランナーに渡され、プランナはこの情報を使用して、データのソート方法を利用するプランを構築します。詳細については、「CREATE TABLE」を参照してください。ソートキーを作成する際のベストプラクティスについては、「最良のソートキーの選択」を参照してください。
ソートは、範囲が制限された述語を効率的に処理することができます。Amazon Redshift は、列データを 1 MB のディスクブロックに保存します。各ブロックの最小値と最大値がメタデータの一部として格納されます。範囲が制限された述語をクエリが使用する際には、クエリプロセッサはこの最小値と最大値を使用します。これにより、テーブルスキャン中に多数のブロックをすばやくスキップすることができます。例えば、日付でソートされた 5 年間のデータがテーブルに保存されており、クエリによって 1 か月間の日付範囲が指定されているとします。この場合、スキャンからディスクブロックの最大 98% を削除できます。データがソートされない場合は、より多くの (場合によっては、すべての) ディスクブロックをスキャンする必要があります。
複合キーまたはインターリーブソートキーを指定できます。複合ソートキーは、クエリ述語が、ソートキー列のサブセットの順序であるプレフィックスを使用する場合に効果的です。インターリーブソートキーは、ソートキーの各列に同じ重み付けをするため、クエリ述語が任意の順序でソートキーを構成する列のサブセットを使用できます。
選択されたソートキーがクエリパフォーマンスに与える影響を把握するには、EXPLAIN コマンドを使用します。詳細については、「クエリプランと実行ワークフロー」を参照してください。
ソートタイプを定義するには、CREATE TABLE または CREATE TABLE AS ステートメントで INTERLEAVED または COMPOUND キーワードを使用します。デフォルトは COMPOUND です。INSERT、UPDATE、または DELETE オペレーションを使用してテーブルを定期的に更新する場合は、COMPOUND を使用することをお勧めします。INTERLEAVED ソートキーは最大 8 列で使用できます。データとクラスターのサイズに応じて、VACUUM REINDEX は、インターリーブソートキーを分析する目的で追加パスを作成するため、VACUUM FULL よりも大幅に実行時間が長くなります。インターリーブテーブルでは、ソート操作およびマージ操作の時間が長くなる場合があります。これは、インターリーブソートでは、複合ソートよりも多くの行の再調整が必要になる可能性があるためです。
テーブルのソートキーを表示するには、SVV_TABLE_INFO システムビューに対してクエリを実行します。