私はシャーディングに不慣れで、シャーディングがさまざまなクエリにどのような影響を与えるかを知りたいと思いました。「people」という名前のサンプルデータセットの場合:
person_id | person_fname | person_lname | person_dob
----------------------------------------------------
1 | John | Smith | 1972-03-04
2 | Sally | Jones | 1968-09-14
3 | Phil | Forrester | 1976-11-25
4 | Gwen | Langley | 1955-04-20
5 | Pedro | Romero | 1962-12-21
6 | Gene | Halford | 1978-01-11
7 | Juan | Peza | 1977-08-07
8 | Pierre | Henry | 1980-04-30
代理ID「id」のハッシュを作成することにより、データは4つのノード間で均等にシャーディングされます。ただし、次のようなすべてのノードにまたがる可能性のあるレコードに対して、読み取りおよび書き込み操作を実行する必要があります。
SELECT person_fname,
person_lname
FROM people
WHERE person_dob > '1970-01-01'
または、「person_id」列の「people」を参照する「orders」のテーブルがさらにあり、結合を実行したいとします。
SELECT order_id,
order_amount,
order_date,
person_fname,
person_lname
FROM orders
LEFT JOIN people
WHERE order_amount > 50
事実上、すべてのノードがクエリを並行して実行するのは事実ですか?1つのインスタンスが8つのレコードに対してクエリを実行する代わりに、4つのインスタンスが2つの(ish)レコードに対してクエリを実行するため、各サーバーで実行する作業が各ステップで少なくなると想定しています。シャード選択を実行できる場合、他のノードはそれ以上の命令を実行し続ける必要はありません。この仮定は正しいですか?
シャーディングと複雑な結合(この単純な例以外)のパフォーマンスへの既知の影響はありますか?