2

従業員部門の2つのテーブルがある場合

1) サーバー側でデータを結合する

SELECT * FROM employee CROSS JOIN department;

ここでは 1 つの接続のみを使用してデータを取得します

2) クライアント側でデータを結合するには、2 つのテーブルを取得して 2 つの接続を使用します。

SELECT * FROM employee;

それを配列に格納し、また

SELECT * FROM department;

それを別の配列に保存し、クライアント側でJavascriptなどを使用してプログラミングすることにより、2つの配列をマージします。

2番目の方法はより複雑かもしれませんが、従業員テーブルをあるサーバーに保存し、部門テーブルを別のサーバーに保存できるという利点があります。これにより、独自のサーバーの負荷が軽減され、各クライアントマシンが機能します。

しかし、私は 2000 テーブルに参加するかどうかを尋ねています。クライアント側またはサーバー側で結合を行うには、どちらがパフォーマンスが高く高速でしょうか?

4

2 に答える 2

2

ほとんどの場合、サーバー側で結合を行う方がはるかに優れています。

クライアント側で結合を行うには、結合条件によって後で両方のテーブルから大部分の行が削除される場合でも、両方のテーブルからすべてのデータをクライアントに転送する必要があります。このようなクエリごとに、多くのネットワーク帯域幅を浪費することになります。

また、サーバー側での結合は、インデックスを使用して一致する行を検索できるため、パフォーマンスが向上することに注意してください。クライアント側の配列にデータを格納すると、インデックス付きルックアップの利点が得られません。最善の方法は、両方の配列がそれぞれの結合列で並べ替えられていることを確認することです。その後、1 回のパスで結合を実行できます。

クライアント側で結合を行うと、別のサーバーに存在するテーブルを結合できるというのは正しいことですが、結合するのに有効な関連データがある場合は、同じサーバーに存在する必要があると主張します。結合をサポートするだけでなく、参照整合性、トランザクションなどもサポートします。

PS: 質問に mongodb と nosql のタグを付けた理由がわかりません。あなたの質問は、非リレーショナル データベースとは何の関係もないようです。

PPS: @EdGibbs からの回答は、代替手段として CROSS JOIN を提示したことを思い出させます。CROSS JOIN を使用することは非常にまれなことであり、部門や従業員の例ではおそらく望ましくありません。代わりに、結合を使用して、特定の部門に属する従業員などの一致を識別したいと思うでしょう。

于 2013-05-13T21:45:13.057 に答える