ある企業が Azure Synapse Analytics の専用 SQL プールでクエリのパフォーマンスチューニングを行っている。クエリ実行を高速化するために有効な手法を2つ選択してください。
- A. すべてのテーブルをレプリケート(REPLICATE)分散にして、全ノードにデータをコピーする
- B. すべてのテーブルを ROUND_ROBIN 分散に変更し、データの均等配布を保証する
- C. JOIN の対象となるファクトテーブルを HASH 分散し、JOIN キーが同一ノードに配置されるようにする
- D. クエリで頻繁にフィルタリングされる列に列ストアインデックス(Clustered Columnstore Index)を活用する
- E. 専用 SQL プールを廃止してサーバーレス SQL プールに切り替え、コストを削減する
解答と解説を見る
正解: C, D
HASH 分散は JOIN キーを基準にデータを各ノードに配布するため、JOIN 時のデータ移動(シャッフル)が不要になりクエリが大幅に高速化される(選択肢 C が正解)。また列ストアインデックス(Clustered Columnstore Index)は列指向の圧縮と段階的スキャンにより、フィルタリング・集計クエリのパフォーマンスを大幅に向上させる(選択肢 D が正解)。選択肢 B の ROUND_ROBIN 分散はデータを均等に配布するが JOIN キーと無関係なため、JOIN 時に大量のデータ移動が発生しパフォーマンスが低下する場合がある。選択肢 A はすべてのテーブルをレプリケートすることだが、大きなファクトテーブルのレプリケートはストレージコストと更新コストが膨大になるため非推奨である。選択肢 E はサーバーレスへの切り替えだが、サーバーレスは専用 SQL プールと役割が異なり(探索的クエリ vs 大規模バッチ分析)、代替としては適切でない場合が多い。