ある小売企業のデータエンジニアリングチームは、Amazon Redshiftで次の2つのテーブルを管理しています。 ・sales_fact テーブル(20億行): 売上トランザクションを格納 ・products テーブル(50万行): 商品マスターデータ 多くの分析クエリは product_id でJOINし、sale_date による範囲フィルタリングを行います。現在これらのクエリが非常に遅い状態です。最もパフォーマンスを向上させるテーブル設計はどれですか?
sales_factをproduct_idでKEY分散させることで、JOINキーが同じスライスに配置されデータ移動が最小化されます。またSORTKEY (sale_date)を設定することでゾーンマップが活用され、日付範囲フィルタリングのスキャン量が大幅に削減されます。小さなdimensionテーブル(products)にDISTSTYLE ALLを設定するとすべてのノードに複製され、JOINのデータ移動がゼロになります。 選択肢BのDISTSTYLE EVENはデータを均等分散しますが、JOINキーが異なるノードに分散するためコロケーションの恩恵が得られず、クエリ実行時にネットワーク再分散コストが発生します。 選択肢CのDISTSTYLE ALLを20億行の大きなfactテーブルに適用すると、全ノードへのデータ複製でストレージコストが膨大になり現実的ではありません。 選択肢DのDISTSTYLE AUTOは有効な選択肢ですが、最適なアクセスパターンが既知の場合は明示的な設定の方がより確実にパフォーマンスを向上させられます。