2

私のクエリでは、同じ都市のすべてのユーザーを取得したいと考えています。このクエリはエンド ユーザーも利用できるため、同じ都市の他のユーザーを確認できます。ユーザーテーブルにクエリを実行して、クエリを実行したユーザーも含めてすべてのユーザーを取得します。

2 つのオプションがあります。

  1. user.id != (クエリを実行しているユーザーのユーザー ID) をクエリする条件を追加します。

  2. または、クエリ結果を表示してクエリを実行しているユーザーを削除する前に処理します。

どちらを使用するかは重要ですか、それともかなりの効果がありますか?

注 - 私の主なクエリは、同じ都市を見つけるほど単純ではありませんが、3 つのテーブル結合を使用して、ユーザーが表示したいデータにアクセスします。簡潔にするためにここに都市を入れました。

4

4 に答える 4

1

私は標準的な答えを出すのは嫌いですが....両方のオプションでいくつかのパフォーマンステストを行い、より速い方を選択してください。違いが明確でない場合は、将来の開発者にとってより簡単な方を選択してください。結果は複数の場所で使用される可能性が高く、コードでチェックを行うのはおそらく使用時に処理するのが最善であるため、クエリに入れる方が開発者にとって簡単だと思います(したがって、使用ごとにチェックを複製します) )。

于 2012-01-05T17:46:47.953 に答える
1

それは状況によって異なりますが、私の一般的な経験では、データベース クエリにコードを追加し、データベースでフィルター処理するパラメーターを追加すると、返されるデータが大幅に減少する場合、これは通常、データベースが実際にそれらを使用してより良い結果を得ることができたことを意味します。より小さなワーキング セットを内部的に (ネットワーク上だけでなく) 使用する実行計画であり、一般的にはより優れています。

たとえば、私が誰かを助けた最近のクエリでは、すべての友達のペアを返すようにクエリを書くことができます。ただし、アプリケーションの観点からは、特定のページで特定の人の友達だけが必要なため、破棄されたばかりの余分なデータを返す必要はなく、クエリプラン自体が異なるため、セットが小さくなるためです。交差結合の片側。とにかく、私のポイントは、通常、データベースにできるだけ多くの情報を提供し、そこから機能させる方がよいということです。

于 2012-01-05T17:56:03.300 に答える
0

提供された情報から、どちらのオプションを選択しても顕著な違いはありません。最初のオプションは、データベースから取得する必要があるデータがわずかに少ないため、わずかに優先される可能性があります。

于 2012-01-05T13:02:15.087 に答える
0

3 つのテーブル結合 + 条件はそれほど大きくないため、最初のオプションを使用できます。

于 2012-01-05T12:32:55.907 に答える