SP内Code
で、2番目のアカウントのクライアントのいずれかと一致する最初のアカウントのいくつかのクライアントのIDを見つける必要があります。動作する次のクエリを作成しました-
SELECT DISTINCT cil.Id FROM ClientIdList AS cil
INNER JOIN Client AS c1
ON cil.Id = c1.Id
INNER JOIN Client AS c2
ON c1.Code = c2.Code
WHERE c2.AccountId = 2
ORDER BY cil.Id
ClientIdList
これは、最初のアカウントから選択されたクライアントの ID を保持する単一列のテーブル型変数です (そして、この時点より前に他の要件のためにこの変数を使用する必要があります) 。WHERE
次のように条件を条件として句に入れると、同じ正しい出力を得ることができJOIN
ます-
SELECT DISTINCT cil.Id FROM ClientIdList AS cil
INNER JOIN Client AS c1
ON cil.Id = c1.Id
INNER JOIN Client AS c2
ON c1.Code = c2.Code AND c2.AccountId = 2
ORDER BY cil.Id
2000 のアカウントとアカウントあたり 10000 のクライアント (つまり、Client
テーブルの 2000 x 10000 行) を考慮すると、どれが適切な選択でしょうか?
クエリをさらに最適化してパフォーマンスを向上させることはできますか?
編集:実際には、条件はSPへのパラメータc2.AccountId = @accountId
です@accountId
編集2:私が理解している限り、WHERE句のバージョンでは、クライアントテーブルの残りの部分でJOINが実行され、結果はWHERE条件に基づいてフィルタリングされます。ただし、新しいバージョンでは、条件が満たされるより小さな行セットで JOIN を実行する必要があります。私は正しいですか?もしそうなら、新しいバージョンはより良いパフォーマンスを提供するべきではありませんか?