小さなデータベース(1台のマシンn1)と非常に大きなデータベース(マシンn2の10億レコード)を結合する必要があります。 アプリケーションサーバーは、dbサーバーのデータをメモリに読み込む必要があります。 最初に小さなデータベースを読みますか?その後、2番目のdbから読み込みますか?小さなテーブルと大きなテーブルの間の結合を最適化する方法は?
これはどのようにして最速で実行できますか? これは一般的にどのように実生活で行われますか?
小さなデータベース(1台のマシンn1)と非常に大きなデータベース(マシンn2の10億レコード)を結合する必要があります。 アプリケーションサーバーは、dbサーバーのデータをメモリに読み込む必要があります。 最初に小さなデータベースを読みますか?その後、2番目のdbから読み込みますか?小さなテーブルと大きなテーブルの間の結合を最適化する方法は?
これはどのようにして最速で実行できますか? これは一般的にどのように実生活で行われますか?
一般的に、処理をデータベースにプッシュしようとする必要があります。たぶん大きなデータベースサーバーは、小さな1つのローカルをプルして、サーバー上のすべてを処理できます。
アプリケーションで処理する場合は、一般的に最適な戦略は、ハッシュ結合を実行することです。小さなデータセットをハッシュテーブルに変換します。次に、大きなデータセットのアイテムをそのハッシュテーブルに対して調べることができます。これはほとんどメモリとCPUを必要とせず、大きなデータセットをストリーミングすることができます。
この戦略は、結合条件が等価(たとえばOrders.CustomerID = Customers.ID
)で、2つのセットのうちの1つがメモリに収まるのに十分小さい場合は常に機能します。