私たちは、企業IDによって分割された顧客データを持っています。つまり、企業のデータが他の企業のデータと混ざり合うことはないので、これがdistkeyとして選ばれました。Redshift:ソートキーにはdistkeyが含まれていますか?
ノードに数千の企業が含まれている可能性があるので、企業IDはソートキーの最初の列にする必要がありますか?または、distkeyはスキャンを開始する前にデータを特定の会社に制限していますか?
私たちは、企業IDによって分割された顧客データを持っています。つまり、企業のデータが他の企業のデータと混ざり合うことはないので、これがdistkeyとして選ばれました。Redshift:ソートキーにはdistkeyが含まれていますか?
ノードに数千の企業が含まれている可能性があるので、企業IDはソートキーの最初の列にする必要がありますか?または、distkeyはスキャンを開始する前にデータを特定の会社に制限していますか?
Distキーは、各ノード/スライス/ブロックに行が格納される順序に影響しません。ソートキー(またはそのようなものがない場合の自然順序)defines the order。
company_idで頻繁にクエリを行い、パフォーマンスを最大限に高める場合は、company_idをメインのソートキー(COMPOUNDまたはINTERLEAVEDのデフォルト値)にします。
また、SVL_QUERY_REPORT viewに慣れ親しむことをお勧めします。フルスキャンが使用されているか(最適なソートキーを使用している場合は範囲が制限されているか)、どのスライスに対して、実際にスキャンされた行数が表示されます。同じデータに対して異なるテーブルレイアウトを試し、クエリ時間を調べるだけでなく、Redshiftが期待することをこのレポートから確認します。
distkeyはパフォーマンスの選択肢です。それを使って異なるシャードを置くことは何もしません。それは透明です。そうでない会社Xは、Yを破棄してそのデータを見ることができます。 –
私はそれを理解していますが、どちらの質問にも本当に答えません。クエリを実行すると 'SELECT COUNT(*)FROM sales WHERE company_id = 123'というクエリを実行すると、どのノードでクエリを実行するのかがわかりますが、* then *はレコードを見つけるためにノード全体をスキャンする必要があります。ソートキーで)、または個々のcompany_id(ソートキーは必要ありません)にノードでセグメント化されたデータですか? –