

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Redshift クエリプランの EXPLAIN データ再分散
<a name="explain-redistribution"></a>

結合ステップ中は、スライスでローカルに保存されていないデータを操作する必要があります。ネットワーク送信 (コンピューティングノード間のデータの移動) は、最も高価なクエリオペレーションです。

結合の `EXPLAIN` 出力では、結合を容易にするためにクラスター周囲にデータを移動する方法も指定します。このデータの移動は、ブロードキャストまたは再分散のいずれかとすることができます。
+ ブロードキャストでは、結合の一方の側からのデータ値は、各コンピューティングノードから他方の各コンピューティングノードにコピーされ、各コンピューティングノードはデータの完全なコピーで終了します。
+ 再分散では、特定のデータ値は現在のスライスから新しいスライス (別のノードにある場合があります) に送信されます。通常、データは再分散され、結合で該当する他方のテーブルの分散キーと一致します (その分散キーが結合する列の 1 つである場合)。いずれのテーブルにも、結合する列の 1 つに分散キーがない場合、両方のテーブルが分散されるか、内部テーブルが各ノードにブロードキャストされます。

また、`EXPLAIN` 出力は、内部テーブルと外部テーブルも参照します。
+ 内部テーブルが最初にスキャンされ、クエリプランの下部付近に表示されます。内部テーブルは、ビルドテーブル内で一致する行をプローブするテーブルです。通常、メモリに保持される内部テーブルはハッシュのソーステーブルであり、可能な場合は、結合される 2 つのテーブルのうち小さい方になります。
+ 外部テーブルは、内部テーブルに対して一致させる行のソースです。通常、このテーブルはディスクから読み取られます。クエリオプティマイザは、前回実行した `ANALYZE` コマンドから生成されたデータベース統計情報に基づいて内部テーブルと外部テーブルを選択します。クエリの `FROM` 句のテーブルの順序では、どのテーブルが内部でどのテーブルが外部かは決まりません。

結合を容易にするためにデータを移動する方法を特定するには、クエリプランで次の属性を使用します。
+ **DS\_BCAST\_INNER** – 内部結合テーブル全体のコピーがすべてのコンピューティングノードにブロードキャストされていることを示します。
+ **DS\_DIST\_ALL\_NONE** – 内部テーブルは `DISTSTYLE ALL` を使用してすべてのノードにすでに分散されているため、再分散は不要です。テーブル全体が各コンピューティングノードに配置されます。
+ **DS\_DIST\_NONE** – 対応するスライスがコンピューティングノードにコロケーションされているため、再分散は不要です。これは、ネットワーク転送がないため、最も効率的なオプションとなります。
+ **DS\_DIST\_INNER** – 内部結合テーブルが再分散されることを示します。内部テーブルがはるかに小さいか、頻繁に更新されない場合は、そのテーブルを `DISTSTYLE ALL` に変更することを検討してください。
+ **DS\_DIST\_OUTER** – 外部結合テーブルが再分散されることを示します。外部テーブルがはるかに小さいか、頻繁に更新されない場合は、そのテーブルを `DISTSTYLE ALL` に変更することを検討してください。
+ **DS\_DIST\_ALL\_INNER** – 結合テーブルが `DISTSTYLE ALL` を使用しているため、内部結合テーブルが単一のノードに送信されていることを示します。この結合は単一ノードで実行され、遅延する可能性があります。
+ **DS\_DIST\_BOTH** – 結合内の両方のテーブルがすべてのノードに再分散されていることを示します。これは考えられる最悪のオプションです。