5
を使用しています。なぜSQL Serverは、私は例のクエリを持っているネステッド・ループ
しかし、User.PlanId = 2のSQLマネージャでは、クエリにネストされたループを使用すると、非常に遅いです...異なる検索基準を使用すると、別のアルゴリズムが使用されるのはなぜですか?どうすれば修正できますか?
を使用しています。なぜSQL Serverは、私は例のクエリを持っているネステッド・ループ
しかし、User.PlanId = 2のSQLマネージャでは、クエリにネストされたループを使用すると、非常に遅いです...異なる検索基準を使用すると、別のアルゴリズムが使用されるのはなぜですか?どうすれば修正できますか?
私はあなたが1
と比べ2のPlanID
を持つユーザーのはるかに高い数値を持っていること。これは、execの計画の変更とランタイムの両方を説明します推測するつもりです。 HASH MATCH
は、最も汎用性の高い(一般的には効率の低い)結合です。基本的に、エンジンはすべての値を手動でペア設定するテーブルを作成します。
NESTED LOOP
は、左側の各値を右側の値と照合し、一方のデータセットが他方よりも大きく、両側がインデックスされている場合にうまく機能します。
HASH MATCH
は、実際に小さなデータセットを使用するとすばやくできます。データセットのサイズが異なるため、速度の違いがあると思われます。
SELECT PlanId, COUNT(*) as CT
FROM User
GROUP BY PlanID
...これはあなたの流通を提供します。
テーブルの行数、PlanId = 1、PlanId = 2の行数 –
'Country.Id'はプライマリキーか少なくとも一意ですか?うーん..時には回避策は、 'left join' +条件の追加とuser.countryidがnullではないことがあります。 – Aprillion
私はplanId = 1を約2500行、planId =約280行持っています。そしてCountry.Id = User.CountryIdには1対1の関係があります – Reno